как распечатать вывод в текстовом файле

Я пытаюсь прочитать текст из файла, выполнить некоторую операцию и вывести результат в другой файл, но по какой-то причине он печатает только одну строку результатов.

    Scanner file = new Scanner(new FileInputStream("/.../file.txt"));
    PrintWriter p = new PrintWriter(new FileWriter("/.../output.txt"));

    int count = 0;

    while (file.hasNextLine()) 
    {
        String s = file.nextLine();
        count++; 
        try
        {
            if(s.contains("#AVFC")){
                p.printf("There are %d words on this line ", s.split("\\s").length-1);
                p.println(count);
                p.close();

            }
        }
        catch(Exception ex){ 
            ex.printStackTrace(); 
        } 



    }
    file.close();

это вывод;

There are 4 words on this line 1

но вывод должен быть:

There are 4 words on this line 1

There are 10 words on this line 13

There are 8 words on this line 16

person JD14    schedule 10.03.2014    source источник
comment
Здесь у вас есть рабочий пример чтения и записи в файлы: stackoverflow.com/a/22074145/3315914   -  person rpax    schedule 11.03.2014


Ответы (2)


Почему вы закрываете p в цикле while?

Scanner file = new Scanner(new FileInputStream("/.../file.txt"));
PrintWriter p = new PrintWriter(new FileWriter("/.../output.txt"));

int count = 0;

while (file.hasNextLine()) 
{
    String s = file.nextLine();
    count++; 
    try
    {
        if(s.contains("#AVFC")){
            p.printf("There are %d words on this line ", s.split("\\s").length-1);
            p.println(count);

        }
    }
    catch(Exception ex){ 
        ex.printStackTrace(); 
    } 



}

p.close();
file.close();

в вашем коде PrintWriter закрывается при первом совпадении, найденном в файле, и другие совпадения не будут записываться в выходной файл, потому что вы закрыли средство записи файла ранее.

person Farnabaz    schedule 10.03.2014
comment
Боже мой, такая глупая ошибка, лол, это был долгий день, спасибо, сэр. - person JD14; 11.03.2014

Не закрывайте PrintWriter внутри цикла. (он вам все еще нужен.) Просто закройте его после цикла.

 while(file.hasNextLine())
 { 
    // your code goes here...
 }
 p.close();
 file.close();
person Kayz    schedule 10.03.2014