当前位置:首页 » 电脑资讯 » 复制文件为什么不能用字符流

复制文件为什么不能用字符流

发布时间: 2022-09-11 22:49:43

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()用来读取。网络传输来的字符。希望能够帮到你。

热点内容
苹果x水平仪为什么是2 发布:2024-11-19 08:36:54 浏览:641
为什么女人说男人水蛇腰 发布:2024-11-19 08:32:15 浏览:231
为什么男人不喜欢听女人叫 发布:2024-11-19 08:32:07 浏览:940
苹果手机连wifi为什么网卡 发布:2024-11-19 08:31:11 浏览:841
微信存储空间统计为什么那么久 发布:2024-11-19 08:19:37 浏览:522
为什么淘宝页面都变黑了 发布:2024-11-19 08:00:14 浏览:421
健身时间到了为什么感觉身体累 发布:2024-11-19 08:00:06 浏览:71
奥恩被动为什么有冷却时间 发布:2024-11-19 07:43:33 浏览:395
为什么一直看近处眼睛会累 发布:2024-11-19 07:42:49 浏览:306
小米为什么wifi信号差 发布:2024-11-19 07:17:51 浏览:258