好的,所以我一次读取一个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;
}
答案 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();