复制文件为什么不能用字符流
1. Java非文本文件为什么不能用字符流读取
用FileReader(java中读字符流的类)读一个非文本文件,然后用FileWriter(java中写字符流的类)写出去.在读文件时,用默认的编码一个字符一个字符的读取,对于有的字节,默认编码根本就不认识,于是打了一个问号(可以用txt打开看到许多问号),导致在读取的时候字符文件里就已经有了很多问号,信息就已经失去了很多.然后即使你在写入文件时采用同样的编码,那也没有用了,因为在读的时候就已经出问题了呀.
2. 怎么利用JAVA《使用字符流实现文本文件的拷贝》
import java.io.*public class Demo{public static void main(String[] args) throws Exception{ File srcFile=new File("./srcDemo.txt");//源文件 File orgFile=new File("./orgDemo.txt");//目标文件 FileInputStream input=new FileInputStream(srcFile);//文件输入流 FileOutputStream output=new FileOutputStream(orgFile);//文件输出流 byte[] buf=new byte[4049];//缓冲 for(int size=0;size!=-1;size=input.read(buf)){ output.write(buf,0,size);//将缓冲区字节写入到输出流中 output.flush();//将输出流内容直接写到文件中 } output.close();//关闭流 input.close();}}
3. 为什么用JAVA写的一个复制文本文档的程序复制出来文本文档乱码
造成乱码有很多的原因:比如文件编码等
但是这段程序乱码是因为字符流和字节流混用造成的乱码
读取是用的带缓冲区的字符流 BufferedReader 这是按字符读入
写入磁盘是的是字节流 FileOutputStream这是按字节写出
解决办法,配套使用,字符流和字节流
一:下面使用字节流复制文本
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
publicclassDemo{
publicstaticvoidmain(String[]args)throwsException{
Filefile=newFile("c:\123.txt");
FileOutputStreamfos=newFileOutputStream(newFile("C:\123COPY.txt"));
FileInputStreambr=newFileInputStream(file);
intlen;
while((len=br.read())!=-1){
fos.write(len);
}
br.close();
fos.close();
}
}
二:下面使用字符流复制文本
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
publicclassDemo2{
publicstaticvoidmain(String[]args)throwsException{
Filefile=newFile("c:\123.txt");
BufferedReaderbr=newBufferedReader(newFileReader(file));
BufferedWriterbw=newBufferedWriter(newFileWriter(newFile("c:\123.txt")));
//使用BufferedReader的时候,按照习惯,一般不会使用br.read()方法,
//大家最喜欢用BufferedReader,因为他每次可以读取一行,非常方便
Stringtemp;
while((temp=br.readLine())!=null){
bw.write(temp);//每次写入一行.
bw.newLine();//并且进行换行
}
br.close();
bw.close();
}
}
4. word文档能使用字符流操作吗
不能。因为Word文档不是纯文本文件,除了文字还包含很多格式信息。不能用字符流操作,可以用字节流操作。
5. 编写一个程序Copy,使用字符流实现对文本文件的复制,要求需要复制的源文件和复制后的目标文件的路径及名
程序如下:
--------------------------------------------------------------
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.FileNotFoundException;
publicclass{
publicstaticvoidmain(Stringargs[]){
if(args.length<2){
System.out.println("请按以下格式输入:java原路径目标路径");
return;
}
try{
FileReaderreader=newFileReader(args[0]);
FileWriterwriter=newFileWriter(args[1]);
intc=-1;
while((c=reader.read())!=-1)
writer.write(c);
reader.close();
writer.close();
}catch(FileNotFoundExceptionfnfe){
System.out.println("原文件不存在!");
return;
}catch(IOExceptionioe){
System.out.println("拷贝失败!");
return;
}
System.out.println("拷贝成功!");
}
}
-----------------------------------------------------------------
运行程序时输入如下命令:
java原文件路径新文件路径
-----------------------------------------------------------------
截图如下:
6. java求助 刚学IO流,为什么复制后的mp3播放失败,哪里写错了
原因是字符流Reader,Writer只能读取文本文件,文本文件指使用记事本打开能看懂的文件,比如.java,.sql,.txt,.xls等等,MP3不属于文本文件,所以需要你把字符流改为字节流来进行读写操作,比如InputStream,OutputStream.你可以取了解字符流和字节流的区别,字符读写文本,字节都可以读写
鉴于你刚学,下面我有具体代码实现图,最后一张
7. java文件复制(bufferedreader读取一个文件内容,用bufferedwriter 写入到另一个文件)
可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到每行的内容,之后通过bufferedwriter (如:OutputStreamWriter)。
BufferedReader bre = null;
OutputStreamWriter pw = null;//定义一个流
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
pw.write(str );//将要写入文件的内容,写入到新文件
};
pw.close();//关闭流
bre .close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
8. 用java控制流实现文件复制后,不能删除文件
是因为你用流调用File文件后没有关闭流导致的,这时外部不能删除该文件。等退出程序后就可以删除该文件。
9. 关于java流的问题,字节流与字符流,为什么要用转换流,把字节转换成字符流,为什么不直接用字符流
这是因为有一些时候系统给你提供的只有字节流,比如说System.in标准输入流。就是字节流。你想从他那里得到用户在键盘上的输入,只能是以转换流将它转换为Reader以方便自己的程序读取输入。再比如说Socket里的getInputStream()很明显只给你提供字节流,你要不行直接用,就得给他套个InputStreamReader()用来读取。网络传输来的字符。希望能够帮到你。