2013-05-19 139 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