Java中的FileReader和ready方法
好的,我正在读取一个40 mb的文件,每次读取1000字节。 每次清空缓冲区时,我都会使用ready()方法检查以确保FileReader仍有要读取的数据。但是,当仍有位尚未读取但流尚未就绪时,返回false。我该如何避免这种情况Java中的FileReader和ready方法,java,file-io,Java,File Io,好的,我正在读取一个40 mb的文件,每次读取1000字节。 每次清空缓冲区时,我都会使用ready()方法检查以确保FileReader仍有要读取的数据。但是,当仍有位尚未读取但流尚未就绪时,返回false。我该如何避免这种情况 if( !fileInput.ready() ) { System.out.println(!fileInput.ready()); //empty the
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;
}
有一种比使用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转换为字节[]。有一种比使用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转换为字节[]。我看不到您从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();
我看不到您在哪里读取文件输入并填充缓冲区。 试试这个
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();
试着这样做:
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();
试着这样做:
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();
为什么在读取文件时调用ready?一直读到你得到一个EOF。为什么你在读文件时要调用ready?只需阅读,直到获得EOF。从技术上讲,“>0”不应该是“>=0”吗?(如果read()返回0)javadoc不会讨论这个问题。理想情况下,它应该是
!=-1
。我无法想象实际使用-2的场景,但是-1
是用于表示文件结尾的值。从技术上讲,“>0”不应该是“>=0”吗?(如果read()返回0)javadoc不会讨论这个问题。理想情况下,它应该是!=-1
。我无法想象实际使用-2的场景,但是-1
是用于表示文件结束的特定值。