1. java 中 FileReader能讀取什麼格式的文件
java
FileReader
是
以Unicode字元為導向的stream,表示以Unicode字元為單位從stream中讀取信息。
FileReader
fr
=
new
FileReader(file);
BufferedReader
br
=
new
BufferedReader(fr);
也就是說,
FileReader
是直接向上層提供是經過
Unicode
編譯好的內容。
所以,FileReader
主要針對的是以
Unicode
為基礎的文件,比如
JSON,
XML,
TXT
等等。
用
FileReader
讀取非
Unicode
的文件,比如二進制文件,得到的會是亂碼,經過處理可以還原原始數據,但是這不是最好的做法。
2. java filereader
FileReader指定不了編碼格式,但是你可以用這種方式
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
try
{
InputStreamReader ir = new InputStreamReader(new FileInputStream(new File(url)), Charset.forName("UTF-8"));
br = new BufferedReader(ir);
String tempString;
//一次讀入一行,直到讀入null為文件結束
while ((tempString = br.readLine()) != null)
{
sb.append(tempString).append("\n");
}
}
finally
{
if (br != null)
{
br.close();
}
}
3. java的FileReader怎麼使用
使用FileReader對象,web應用程序可以非同步的讀取存儲在用戶計算機上的文件(或者原始數據緩沖)內容,可以使用File對象或者Blob對象來指定所要處理的文件或數據.其中File對象可以是來自用戶在一個<input>元素上選擇文件後返回的FileList對象,也可以來自拖放操作生成的 DataTransfer對象,還可以是來自在一個HTMLCanvasElement上執行mozGetAsFile()方法後的返回結果.
創建一個FileReader對象如下:
var reader = new FileReader();
4. java 中配置文件路徑讀取使用FileReader和InputStream區別和用法
一、按數據來源(去向)分類:
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、是Char[]: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringWriter
5、網路數據流:InputStream, OutputStream, Reader, Writer
二、按是否格式化輸出分:
1、要格式化輸出:PrintStream, PrintWriter
三、按是否要緩沖分:
1、要緩沖:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
四、按數據格式分:
1、二進制格式(只要不能確定是純文本的): InputStream, OutputStream及其所有帶Stream結束的子類
2、純文本格式(含純英文與漢字或其他編碼方式);Reader, Writer及其所有帶Reader, Writer的子類
五、按輸入輸出分:
1、輸入:Reader, InputStream類型的子類
2、輸出:Writer, OutputStream類型的子類
六、特殊需要:
1、從Stream到Reader,Writer的轉換類:InputStreamReader, OutputStreamWriter
2、對象輸入輸出:ObjectInputStream, ObjectOutputStream
3、進程間通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4、合並輸入:SequenceInputStream
5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
決定使用哪個類以及它的構造進程的一般准則如下(不考慮特殊需要):
首先,考慮最原始的數據格式是什麼: 原則四
第二,是輸入還是輸出:原則五
第三,是否需要轉換流:原則六第1點
第四,數據來源(去向)是什麼:原則一
第五,是否要緩沖:原則三 (特別註明:一定要注意的是readLine()是否有定義,有什麼比read, write更特殊的輸入或輸出方法)
第六,是否要格式化輸出:原則二
Java中Inputstream與Reader的區別
Reader支持16位的Unicode字元輸出,InputStream支持8位的字元輸出。
Reader和InputStream分別是I/O庫提供的兩套平行獨立的等級機構,
InputStream、OutputStream是用來處理8位元的流,
Reader、Writer是用來處理16位元的流。
而在JAVA語言中,byte類型是8位的,char類型是16位的,所以在處理中文的時候需要用Reader和Writer。
值得說明的是,在這兩種等級機構下,還有一道橋梁InputStreamReader、OutputStreamWriter負責進行InputStream到Reader的適配和由OutputStream到Writer的適配。
java.io.Reader 和 java.io.InputStream 組成了 Java輸入類。Reader 用於讀入16位字元,也就是 Unicode編碼的字元;而 InputStream 用於讀入 ASCII字元和二進制數據。
在 Java中,有不同類型的 Reader 輸入流對應於不同的數據源:
FileReader 用於從文件輸入;
CharArrayReader 用於從程序中的字元數組輸入;
StringReader 用於從程序中的字元串輸入;
PipedReader 用於讀取從另一個線程中的 PipedWriter 寫入管道的數據。
相應的也有不同類型的 InputStream 輸入流對應於不同的數據源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream。另外,還有兩種沒有對應 Reader 類型的 InputStream 輸入流:
Socket 用於套接字;
URLConnection 用於 URL 連接。
這兩個類使用 getInputStream() 來讀取數據。
相應的,java.io.Writer 和 java.io.OutputStream 也有類似的區別。
5. java中的類 FileReader讀取字元了,其讀取字元需要指定字元的編碼規則吧,那麼是怎麼指定的
out.write(s.getBytes("ISO-8859-1"));
這條語句是說,將s按照ISO-8859-1編碼的方式進行編碼轉換,而ISO-8859-1編碼是單位元組拉丁字元編碼(即ASCII編碼),會把雙位元組的中文編碼轉換成單位元組,丟失了一個位元組,一般的轉換成了單位元組後,該位元組對應的十六進制數是3F,該數對應ASCII編碼的?所以,結果是一串問號;其實,你在把數據寫入到文件,已經發生了丟失了數據!所以最後是亂碼!!
現在解釋為什麼123正常顯示,字元串在java中是以Unicode編碼方式進行編碼的,該編碼方式佔2個位元組,對於123這3個字元,其實也佔有了6個位元組,在進行編碼轉換的過程中,也丟失了一個位元組,丟失的是高位元組,保留了低位元組,同時Unicode編碼是兼容ASCII碼的,所以可以認為沒有發生位元組丟失,讀取的時候,只要是以兼容ASCII碼的編碼方式讀取,基本上不會出現亂碼!
如有不清楚地方,歡迎繼續追問!!
6. java中關於FileReader的read方法!!
FileReader的read() 方法是阻來塞式的,讀取源位元組或數據塊,直到無數據輸入。它要麼返回數據的下一個位元組,當到達文件末尾時,返回-1。這意味著,我們每循環讀取一個位元組,將其列印為十六進制字元串。順便說一句,將InputStream轉換成位元組數組是可選的。另一方面,例2是按字元讀取數據。繼承自FileReader的InputStreamReader 的read() 方法讀取單個字元,並返回該字元,當到達流末尾時,返回-1。