Java中的FileReader和ready方法

时间:2011-03-05 00:32:22

标签: java file-io

好的,所以我一次读取一个40字节的1000字节文件。 每次我清空缓冲区时,我都要检查以确保FileReader仍然有使用ready()方法读取的数据。但是,当有些位仍然没有被读取但是流未准备好时,它返回false。我该怎样绕过这个?

if( !fileInput.ready() )
            {

                    System.out.println(!fileInput.ready());
                      //empty the rest of the buffer into the output file
                     fileOutput.write( buffer.toString() );
                     fileOutput.flush();
                      doneProcessing = true;
            }

3 个答案:

答案 0 :(得分:2)

我没有看到你从fileInput读取的位置和填充缓冲区。 试试这个

FileOutputStream out =  ...
InputStream in = .. 

int len = 0;
byte[] buffer = new byte[1024]; 

while ((len = in.read(buffer)) >= 0)
{ 
    out.write(buffer, 0, len);
}

in.close(); 
out.close();

答案 1 :(得分:1)

有一种比使用ready()方法更容易阅读的方法。诀窍是当完全读取时,read方法返回-1。

char[] buf = new char[ 1024 ];

for( int count = reader.read( buf ); count != -1; count = reader.read( buf ) )
{
    output.write( buf, 0, count );
}

如果您正在阅读二进制文件,则可以使用InputStream执行类似的操作。只需将buf转换为byte []。

答案 2 :(得分:0)

尝试这样做:

    Reader in = new FileReader(args[0]);
    Writer out = new FileWriter("output.doc");
    BufferedReader br = new BufferedReader(in);
    String str;
    while((str=br.readLine())!=null){
        out.write(str);
        System.out.println(str.getBytes());
    }
    out.close();