Вопрос по java, file-io – Чтение и запись из одного и того же файла в Java

9

Я хочу читать изcriteria.txt файл, чтобы токенизировать и добавить в конце того же файла токены. Программа выдает исключение:No file found! Я не знаю, где моя ошибка. Любое предложение поможет мне. Заранее спасибо!

Вот мой код:

import java.io.*;
import java.util.StringTokenizer;

public class Test
{
    private FileReader fr;
    private BufferedReader br;
    private FileWriter fw;
    private BufferedWriter bw;
    private StringTokenizer strtok;
    private String s;

    //constructor
    public Test()  
    {
        try
        {
            fw=new FileWriter("criteria.txt", true);
            bw=new BufferedWriter(fw);

            try
            {
                fr=new FileReader("criteria.txt");
                br=new BufferedReader(fr);

                while((s=br.readLine())!=null)
                {
                    strtok=new StringTokenizer(s," ");
                    while(strtok.hasMoreTokens())
                    {
                        bw.write("\n"+strtok.nextToken());
                    }
                    br.close();
                }
            }
            catch(FileNotFoundException e)
            {
                System.out.println("File was not found!");
            }
            catch(IOException e)    
            {
                System.out.println("No file found!");
            }

            bw.close();
        }
        catch(FileNotFoundException e)
        {
            System.out.println("Error1!");
        }
        catch(IOException e)    
        {
            System.out.println("Error2!");
        }
    }   

    public static void main(String[] args) 
    {
        Test t=new Test();
    }
}
проверьте каталог ваших файлов Abubakkar
Я копирую файл на D: / и меняю фактическое местоположение файла на "D: /criteria.txt», Это нет работа. Может быть ошибка в коде? Lavinia
Если вы используете Eclipse, файл должен находиться в корневом каталоге проекта. Chris Dargis
@Doug Ramsey Он находится в корневом каталоге проекта. Lavinia

Ваш Ответ

3   ответа
1

Ваше самое большое удаление - это размещениеbr.close(); внутриwhile() Цикл: вы каждый раз, когда записываете в файл файл, сообщаете компьютеру о его немедленном закрытии, поэтому файл остается закрытым, и компьютер никогда не найдет его во время следующей итерации / выполнения цикла. Тем не менее, я должен отредактировать исходную программу так:

import java.io.*;
import java.util.StringTokenizer;

public class Test
{
    private FileReader fr;
    private BufferedReader br;
    private FileWriter fw;
    private BufferedWriter bw;
    private StringTokenizer strtok;
    private String s;

    //constructor
    public Test()  
    {
        try
        {
            fw=new FileWriter("criteria.txt", true);
            bw=new BufferedWriter(fw);

            try
            {
                fr=new FileReader("criteria.txt");
                br=new BufferedReader(fr);

                **while((s=br.readLine())!=null)
                {
                    strtok=new StringTokenizer(s," ");
                    while(strtok.hasMoreTokens())
                    {
                        bw.write("\n"+strtok.nextToken());
                    }

                }
                     br.close();
            }**
            catch(FileNotFoundException e)
            {
                System.out.println("File was not found!");
            }
            catch(IOException e)    
            {
                System.out.println("No file found!");
            }
            bw.close();
        }
        catch(FileNotFoundException e)
        {
            System.out.println("Error1!");
        }
        catch(IOException e)    
        {
            System.out.println("Error2!");
        }
    }   

    public static void main(String[] args) 
    {
        Test t=new Test();
    }
}

Папка или каталог, в котором находится файл, не существуетв данном случае это не имеет значения, так как программа создаст новый файл с именем "criteria.txt» в той же папке, что и Java-программа; однако вам нужно будет открыть файл в текстовом редакторе, чтобы добавить / добавить некоторые данные, так как изначально файл будет пустым. Последующий запуск программы теперь добавит уже вставленный контент (ы) в виде строки конкатенации на новую строку. Новая строка будет создаваться при каждом запуске программы. Надеюсь это поможет.

0

На мой взгляд, вы можетесделать это. Вы можете't открыть один и тот же файл для чтения и записи одновременно. Вы должны открыть и сохранить информацию о файле в структуре данных, а затем закрыть ее. Затем вам нужно поработать со структурой данных в памяти и открыть файл для записи результатов. И когда вы закончите писать, вы должны закрыть его.

8

Вам нужно закрыть свой ридер после того, как вы закончили читать файл, т.е. после цикла while. В настоящее время вы закрываете его после прочтения первой строки, которая вызывает ""IOException: Stream closed когда он пытается прочитать вторую строку.

Изменить на:

while((s=br.readLine())!=null)
{
    strtok=new StringTokenizer(s," ");
    while(strtok.hasMoreTokens())
    {
        bw.write("\n"+strtok.nextToken());
    }
    //br.close(); 
Спасибо! Это работает сейчас. Lavinia

Похожие вопросы