FileReader в Java и готовый метод - PullRequest
0 голосов
/ 05 марта 2011

Хорошо, поэтому я читаю файл размером 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 ]

2 голосов
/ 05 марта 2011

Я не вижу, где вы читаете из 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 голос
/ 05 марта 2011

Существует более простой способ чтения, чем использование метода 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 в байт [].

0 голосов
/ 02 декабря 2016

Попробуйте сделать так:

    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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...