當前位置:首頁 » 電腦資訊 » 復制文件為什麼不能用字元流

復制文件為什麼不能用字元流

發布時間: 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()用來讀取。網路傳輸來的字元。希望能夠幫到你。

熱點內容
專櫃衣服淘寶為什麼找不了同款 發布:2024-11-19 10:17:07 瀏覽:897
為什麼電腦調節亮度打不開了 發布:2024-11-19 10:02:50 瀏覽:179
蘋果設置起床天氣預報為什麼卡 發布:2024-11-19 09:48:16 瀏覽:709
方舟生存花盆為什麼種不了東西 發布:2024-11-19 09:16:58 瀏覽:627
大黃粉為什麼顏色有差異 發布:2024-11-19 09:09:33 瀏覽:588
羅漢為什麼不吃東西變色了 發布:2024-11-19 09:02:47 瀏覽:772
進化之地為什麼找不到了 發布:2024-11-19 09:00:41 瀏覽:554
蘋果x水平儀為什麼是2 發布:2024-11-19 08:36:54 瀏覽:641
為什麼女人說男人水蛇腰 發布:2024-11-19 08:32:15 瀏覽:232
為什麼男人不喜歡聽女人叫 發布:2024-11-19 08:32:07 瀏覽:941