程序执行完成后,打开复制后的文件,提示“文件已损坏,无法打开”。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
publi class Test{
public static void main(String[] args){
//使用字符流复制文件
BufferedReader br = null;
BufferedWriter bw = null;
try {
FileReader fr = new FileReader("C:\\Users\\g'h\\Desktop\\aaaa.docx");
br = new BufferedReader(fr);
FileWriter fw = new FileWriter("C:\\Users\\g'h\\Desktop\\bbbb.docx");
bw = new BufferedWriter(fw);
String str = null;
while((str=br.readLine())!=null){
bw.write(str);
bw.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(br!=null){
br.close();
}
if(bw!=null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流不能读取非文本文件,如果需要读写word文档,需要用到阿帕奇的poi,复制doc文件可以打开,但是乱码,所以doc算是带字符编码格式的文本文件,docx是多个文件组成的压缩文件。复制的时候尽量使用字节流,字符流的底层也还是字节流。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
publi class Test{
public static void main(String[] args){
//第一种:使用字节流复制文件
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
FileInputStream fis = new FileInputStream("C:\\Users\\g'h\\Desktop\\test.docx");
bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("C:\\Users\\g'h\\Desktop\\testcopy.docx");
bos = new BufferedOutputStream(fos);
int aa = -1;
while((aa=bis.read())!=-1){
bos.write(aa);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bis!=null){
bis.close();
}
if(bos!=null){
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
publi class Test{
public static void main(String[] args){
//使用字符流复制文件
BufferedReader br = null;
BufferedWriter bw = null;
try {
FileReader fr = new FileReader("C:\\Users\\g'h\\Desktop\\aaaa.txt");
br = new BufferedReader(fr);
FileWriter fw = new FileWriter("C:\\Users\\g'h\\Desktop\\bbbb.txt");
bw = new BufferedWriter(fw);
String str = null;
while((str=br.readLine())!=null){
bw.write(str);
bw.newLine();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(br!=null){
br.close();
}
if(bw!=null){
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
如果使用txt格式的文件来测试复制,则是可以正常打开的,使用docx格式的文件测试复制,打开复制后的文件就会提示:
这是为什么??求各位大神解答。