IO流综合实例(文件复制的相关操作)
2018-03-16 17:19
288 查看
案例:分别在D盘、F盘下创建目录aa、bb,并且在aa,bb目录下分别创建a.txt、b.txt两个文件,往这两个文件中写入数据,然后将两个文件复制到E盘中,并且将E盘中的b.txt里边的内容复制到a.txt文件内容指定偏移量为5处。
分析:1.首先要创建目录aa、bb,和原始文件a.txt和b.txt。
2.写入数据和复制文件两个方法。
3.写入数据 字符高级缓冲流(自动刷新)println ,此时a.txt和b.txt有内容了。
4.复制文件的过程是先创建E盘下a.txt和b.txt两个文件,再往里复制内容,此时E盘的两个文件都复制成功。
5.插入数据,把b内容插入a里。
注意:1.换行符的问题。2.File[i]数组建立。3.临时文件的创建。
案例复习了IO流中的字符高级缓冲流、随机访问流中对象的创建,构造方法、有关方法的在文件操作的使用
对文件读取、写入、复制基本操作,临时文件的创建
package zonghe_IO流总结; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.RandomAccessFile; public class IoStreamDemo { public static void main(String[] args) { IoStreamDemo file = new IoStreamDemo(); file.createFiles(); } /* * 创建文件 */ private void createFiles(){ File file = new File("d:\\aa"); File file0 =new File("f:\\bb"); file.mkdir();//创建目录aa file0.mkdir();//创建目录bb File file1 = new File(file,"a.txt"); File file2 = new File(file0,"b.txt"); try { file1.createNewFile();//创建目录aa下的文件a.txt file2.createNewFile();//创建目录bb下的文件b.txt } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } write(file1,file2);//写入数据 copy(file1,file2);//复制文件 } /* * 复制文件 */ private void copy(File file1, File file2) { //e盘创建目录,和文件ee.txt File file = new File("e:"+File.separator+"ee"); file.mkdir();//创建目录ee File file3 = new File(file,"a.txt");//在目录ee下创建文件a.txt File file4 = new File(file,"b.txt");//在目录ee下创建文件b.txt try { file3.createNewFile(); file4.createNewFile(); //到此为止已经有了4个文件了,还没有复制 File[] files =new File[4]; files[0]=file1; files[1]=file2; files[2]=file3; files[3]=file4; //分别往e盘复制a.txt 和b.txt两个文件 for(int i=0;i<2;i++){ copyAll(files[i],files[i+2]); } // 此时e盘里边有了a.txt 和b.txt 两个文件 插入数据 insert(file3,file4); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } /* * 插入数据 * 把b.txt插入到a.txt */ private void insert(File file3, File file4) { try { RandomAccessFile raf1 = new RandomAccessFile(file3, "rw"); File tmpFile = File.createTempFile("raf", ".tmp");//创建临时文件 RandomAccessFile raf2 = new RandomAccessFile(tmpFile, "rw"); RandomAccessFile raf3 = new RandomAccessFile(file4, "rw"); //将raf1的偏移量移到5,在把后面的内容复制到tmpFile raf1.seek(5); byte[] bys = new byte[1024]; int len =0; while((len=raf1.read(bys))>0){ raf2.write(bys, 0, len); } //raf1的偏移量重移至5 raf1.seek(5); len =0; while((len=raf3.read(bys))>0){ raf1.write(bys, 0, len); } //raf2的偏移量至回0 raf2.seek(0); len=0; while((len=raf2.read(bys))>0){ raf1.write(bys, 0, len); } //删除临时文件tmpFile tmpFile.deleteOnExit(); //释放资源 raf1.close(); raf2.close(); raf3.close(); } catch (FileNotFoundException e) { //抛异常 // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * 执行复制 * 复制文件d盘复制到e */ private void copyAll(File string, File string2) { try { //创建对象流,读、写流 BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(string)));//字符缓冲输入流,读数据 PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(string2)),true);//高级字符缓冲输出流,写数据,可以自动刷新 //复制文件,先读后写 String str =null; while((str=br.readLine())!=null){ pw.println(str); } //释放资源 br.close(); pw.close(); } catch (FileNotFoundException e) { System.out.println("该文件未找到"); // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * 写入数据 */ private void write(File file1, File file2) { //写数据到a.txt try { //创建字符高级缓冲流 PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file1)),true);//构造方法可以自动启动刷新功能 String[] strs = new String[1]; for(int i=0;i<1;i++){ strs[i]="abcdefghijklmnopqrstuvwxyz"; pw.println(strs[i]);//往a.txt循环写入数据 } PrintWriter pw0 = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file2)),true); String str="ABC"; pw0.print(str);//往b.txt文件里写入数据 //释放资源 pw.close(); pw0.close(); } catch (FileNotFoundException e) { System.out.println("该文件未找到"); e.printStackTrace(); } } }
相关文章推荐
- java中最简单的文件复制,读写(IO流操作)
- 关于java Io流的操作,复制(多个文件)、删除、剪切、下载网络资源
- Python文件复制中如何复制相关文件的实际操作
- IO流操作实现文件拷贝\简单加密及相关知识点
- IO流操作实现文件拷贝\简单加密及相关知识点
- Delphi学习笔记——文件路径相关的字符串操作(综合)
- Python复制文件操作实例详解
- C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】
- 利用io流实现文件写出和复制操作
- 利用application,cookies,sessino以及文件文件操作制作计数器和投票的综合实例(按学习进程更新)
- C#中File类操作文件实例-创建文件、复制文件、移动文件
- IO流操作一 :源文件/源文件夹 复制到指定目录
- php文件操作相关类实例
- 系统调用 7--综合实例1(文件复制)
- 文章标题 Java中io流的一些简单操作(包含文件复制,向硬盘中写入文本文件,以及io流高级应用序列化和反序列化)
- IO流大文件操作----从一个文件复制到另一个文件
- 文件复制操作io流
- Java中IO流文件读取、写入和复制的实例
- node.js文件的复制,创建文件夹等相关操作
- php文件操作相关类实例