2013-05-19 56 views
0

我有一個名爲test.txt的單詞hello的文本文件。我正在嘗試使用Reader.read()方法讀取它並將內容打印到控制檯。然而,當我運行它時,我只是得到了控制檯上打印的數字104,沒有其他東西(即使將文本更改爲更多/更少的字符,我也會得到相同的數字)。任何想法,爲什麼它是這樣的行爲,我怎樣才能修改這個現有的代碼打印test.txt的內容作爲控制檯上的字符串?這裏是我的代碼:Java閱讀器,文本文件的讀取方法

public static void spellCheck(Reader r) throws IOException{ 
    Reader newReader = r; 
    System.out.println(newReader.read()); 
} 

和我的主要方法,我使用的測試上面:

public static void main (String[] args)throws IOException{ 
    Reader test = new BufferedReader(new FileReader("test.txt")); 
    spellCheck(test); 
} 
+0

@ peter.murray.rust:不,它返回一個char作爲int,或-1,作爲每個Reader。 –

+0

您正在閱讀一個字符,並且正在打印一個字符。代碼按設計工作。問題是什麼? – EJP

回答

2

由於the javadoc表示read()方法讀取一個char,並將其作爲int返回(以便能夠返回-1以指示流結束)。要打印的int用作一個字符,只投它:

int c = reader.read(); 
if (c != -1) { 
    System.out.println((char) c); 
} 
else { 
    System.out.println("end of the stream"); 
} 

要讀到的一切,循環,直到你得到-1,或逐行讀取,直到你得到空。

+0

如何逐行閱讀?我的方法是以(Reader r)作爲參數,我不想改變它。然後我不能說'BufferedReader newReader = r',因爲那給了我不兼容的類型。但據我從文檔中可以看出,Reader沒有readLine()方法。 – user1894469

+0

BufferedReader是允許逐行讀取的類。所以,如果這就是你想要做的,把你的方法包裝成一個BufferedReader閱讀器。但是你不需要逐行閱讀一切。您可以簡單地使用[this read method](http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#read%28char [],%20int,%20int%29) (爲了更好的性能),直到它返回-1。 –

4

read()是做什麼它是supposed to

讀取一個字符。此方法將阻塞,直到出現字符,發生I/O錯誤或到達流的末尾。

(強調)

相反,你可以在一個循環中調用BufferedReader.readLine()

+0

感謝您的鏈接,答案正盯着我。不幸的是,我只能選擇一個作爲答案,但您的幫助和及時答覆表示讚賞。 – user1894469