您的位置:首页 > 其它

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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: