Создание, запись и чтение файлов

#java #file

#java #файл

Вопрос:

Я знаю, что есть много вопросов, связанных с этим, но я все еще не понимаю. Я скопировал приведенный ниже код из руководства по созданию файла, записи в него и чтению из него. Существует CreateFile класс, ReadFile class и Demo class:

CreateFile.java

 import java.io.*;
import java.lang.*;
import java.util.*;

public class CreateFile {
    private Formatter x;

    public void openFile(){
        try{
            x = new Formatter("chinese.txt");
        }
        catch(Exception e)
        {
            System.out.println("You have an error");
        }
    }

    public void addRecords(){
        x .format("%s%s%s", "20 ", "bucky ", "robers");
    }

    public void closeFile(){
        x.close();
    }
}
  

ReadFile.java

 public class ReadFile {
    private Scanner x;

    public void openFile()
    {
        try{
            x = new Scanner(new File("words.txt"));
        }
        catch(Exception e){
            System.out.println("could not find file");
        }
    }

    public void readFile()
    {
        while(x.hasNext()) 
        {
            String a = x.next();
            String b = x.next();
            String c = x.next();

            System.out.printf("%s %s %sn", a,b,c);
        }
    }
    public void closeFile()
    {
        x.close();
    }

}


public class Demo {

    public static void main(String[] args) {
        CreateFile g = new CreateFile();
        g.openFile();
        g.addRecords();
        g.closeFile();

        WordCounter r = new WordCounter();
        r.openFile();
        r.readFile();
        r.closeFile();
    }
  

В Demo.java если я удалю последние четыре инструкции, связанные с чтением файла, первые четыре инструкции, связанные с открытием и записью в файл, будут выполняться без ошибок. Однако, как только я добавлю

 WordCounter r = new WordCounter();
r.openFile();
r.readFile();
r.closeFile();
  

и запустите программу, она выводит: Exception in thread "main" could not find file. Я не уверен, что происходит, файл chinese.txt никогда не создается?

Комментарии:

1. Внимательно прочитайте код: из какого файла выполняется чтение ReadFile?

2. Руководство по Javadoc для ввода-вывода файлов

3. @JBNizet Я чувствую, что половина моих вопросов на этом сайте заканчиваются глупыми ошибками… Спасибо.

Ответ №1:

Я бы посоветовал вам изучить сериализацию намного проще, чем запись в файлы .txt.

Но если вам действительно нужно создавать файлы .txt, вот как вы записываете в файл .txt

     //This gets your project directory
    private String projectPath = System.getProperty("user.dir");
    //call save()
    String save("test.txt", "This is will be save to a test.txt file");

    private boolean save(String textfile String outputtext){
        String filepath = projectPath   textfile;

        try{
            BufferedWriter writer = new BufferedWriter(new FileWriter(filepath));
            writer.write(outputtext);
            writer.close();
        } catch(IOException e) { }

        return true;
    }
  

И вот как вы это читаете

     private String load(String textfile){
        String temp="";
        String filepath = projectPath   textfile;
        try{
            BufferedReader reader =new BufferedReader(new FileReader(filepath));
            while(true){
                //this will read one line at a time you can append it output
                try {
                    temp = reader.readLine();
                    //If no more lines break out of the loop
                    if(line==null)
                        break;

                }catch(IOException e){}
            }
            reader.close();
        }
        catch(IOException e){}
        //Return contents of the file you loaded
        return temp;
    }
  

Я надеюсь, что этот код достаточно понятен. Если у вас возникнут какие-либо дополнительные вопросы, дайте мне знать. Я с удовольствием отвечу на них.

Комментарии:

1. Таким образом, код не компилируется и демонстрирует много неэффективной практики.

2. Это не компилируется, потому что это всего лишь часть более крупного проекта. Я просто скопировал это из одного из своих заданий. Это должно работать нормально. Для меня это работает.