Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的FileReader和ready方法_Java_File Io - Fatal编程技术网

Java中的FileReader和ready方法

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

好的,我正在读取一个40 mb的文件,每次读取1000字节。 每次清空缓冲区时,我都会使用ready()方法检查以确保FileReader仍有要读取的数据。但是,当仍有位尚未读取但流尚未就绪时,返回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;
            }

有一种比使用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
是用于表示文件结束的特定值。