Запись в текстовый файл на Java

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

Создайте новый класс в своем проекте из предыдущего урока про чтение текстового файла, нажав File > New File в меню NetBeans. Выберите Java в разделе Categories диалогового окна и Class в списке File Types. Нажмите кнопку «Далее» внизу.

В качестве имени класса введите Write, затем нажмите «Готово». Добавьте следующие три import в свой новый код:

import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;

Ваш новый класс должен выглядеть так:

Класс Write

Опять же, подчеркивание, потому что мы еще не использовали импортированные классы.

Когда вы хотите сделать запись в текстовый файл в Java, вы можете начать с самого начала текста и перезаписать все. Или можно начать с конца и добавить в текст. Класс FileWriter позволяет вам указать, что именно вы хотите сделать. Мы добавим поле, которое устанавливает значение для добавления текста для класса FileWriter. Мы также добавим поле, чтобы установить имя файла.

Итак добавьте следующие два поля и конструктор:

public class Write {
    
    private String path_to_file;
    private boolean append = false;
    
    public Write (String path) {
        path_to_file = path;
    }
}

Переменную boolean мы назвали append и установили для нее значение false. Это значение по умолчанию для класса FileWriter, и означает, что мы не хотим делать запись в текстовый файл, а хотим полностью стереть его.

Конструктор устанавливает значение для поля path_to_file (переменной экземпляра), которое является именем и расположением файла. Оно будет передано, когда мы создадим новый объект из нашего класса Write.

Как уже упоминалось в предыдущем разделе, вы можете установить более одного конструктора в коде. Мы можем установить второй конструктор и передать значение добавления или нет.

Таким образом, пользователь может либо просто использовать первый конструктор и передать имя файла, либо имя файла и значение добавления текста. Итак, добавьте второй конструктор под первым:

public Write (String path, boolean value) {
    path_to_file = path;
    append = value;
}

Этот второй конструктор в круглых скобках имеет два значения: путь к файлу и значение добавления текста (то есть, мы укажем, будем ли мы добавлять текст к файлу, либо перезаписывать весь файл) в логической переменной. Если вы хотите добавить запись в текстовый файл, вы можете использовать этот конструктор для создания нового объекта. Если просто хотите перезаписать текстовый файл, вы можете использовать первый конструктор.

Ваш код теперь должен выглядеть так:

package openandread;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;

public class Write {
    
    private String path_to_file;
    private boolean append = false;
    
    public Write (String path) {
        path_to_file = path;
    }
    
    public Write (String path, boolean value) {
        path_to_file = path;
        append = value;
    }

}

Чтобы записать в текстовый файл, добавьте следующий метод под последним конструктором:

public void fileWrite (String text) throws IOException {

}

Этот метод не должен возвращать значение, поэтому мы сделали его void. В круглых скобках метода есть строковая переменная с именем text. Это тот текст, который мы хотим записать в текстовый файл.

Как и в прошлом уроке мы добавили throws IOException, поскольку нам нужно обрабатывать ошибки при записи текстов в файлы.

Первое, что нам нужно в методе - это объект FileWriter. FileWriter позаботится об открытии правильного файла и сохранении текста в байтах. Добавьте следующую строку в метод fileWrite:

FileWriter write_to_file = new FileWriter(path_to_file, append);

Итак, мы создаем новый объект FileWriter с именем write_to_file. В круглых скобках FileWriter мы передаем имя и путь, а также значение добавления. Оно будет либо true (добавить в файл), либо false (не добавлять).

Если файл, который вы передаете, не существует, FileWriter создаст его сам.

Но FileWriter записывает только байты. А мы можем передать простой текст FileWriter с помощью класса PrintWriter. Для этого PrintWriter имеет несколько удобных методов печати. Но ему нужно имя от FileWriter для создания объекта из класса. Итак, добавьте эту строку в свой метод:

PrintWriter print = new PrintWriter(write_to_file);

Наш объект PrintWriter называется print. В круглых скобках PrintWriter мы добавили имя нашего объекта FileWriter.

Чтобы Java-программа сделала запись в текстовый файл, введите имя объекта PrintWriter, и поставьте точку:

print.

Как только вы введете точку, NetBeans отобразит список доступных параметров:

Подсказки NetBeans print

В списке очень много вариантов print!

Мы будем использовать один из методов printf. Он позволяет передавать отформатированную строку текста на PrintWriter. Причиной для использования printf является обработка символов новой строки. Символ новой строки различается в зависимости от используемой операционной системы. Windows добавит символы \r\n для новой строки. А вот системы Unix просто используют \n. Использование функции printf обеспечит правильное написание кода для записи в текстовый файл Java-программой независимо от платформы.

Добавьте следующую строку в свой код:

print.printf("%s" + "%n", text);

Мы передали методу printf две вещи: формат для текста и строку, которую мы хотим записать в текстовый файл. Они разделяются запятой. Обратите внимание на первое:

"%s" + "%n"

%s в двойных кавычках означает строку символов любой длины. %n означает перевод на новую строку. Итак, мы говорим методу printf о форматировании строки символов и добавлении новой строки в конце. Фактический текст, который нужно отформатировать, идет после запятой. Метод printf весьма полезен, и мы рассмотрим параметры более подробно в следующем разделе. А пока давайте продолжим.

Осталось добавить единственное в наш метод:

print.close();

Эта строка закрывает текстовый файл и освобождает все ресурсы, которые он использовал.

Ваш класс Write теперь должен выглядеть так:

package openandread;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;

public class Write {
    
    private String path_to_file;
    private boolean append = false;
    
    public Write (String path) {
        path_to_file = path;
    }
    
    public Write (String path, boolean value) {
        path_to_file = path;
        append = value;
    }
    
    public void FileWrite (String text) throws IOException {
        FileWriter write_to_file = new FileWriter(path_to_file, append);
        PrintWriter print = new PrintWriter(write_to_file);
        
        print.printf("%s" + "%n", text);
        
        print.close();
    }
}

Чтобы проверить свой новый класс, вернитесь к классу ReadFile (класс с методом main). Добавьте следующее, чтобы создать новый объект из класса Write:

Write line = new Write(new_path, true);

Итак, мы создали объект Write с именем line. В круглых скобках Write мы добавили две вещи: имя файла и значение добавления текста true. Это обеспечит вызов второго из созданных нами конструкторов. Если мы хотим просто добавить запись в текстовый файл, то код будет таким:

Write line = new Write(new_path);

Поскольку мы устанавливаем значение добавления текста по умолчанию, то есть false, имя файла нам нужно только в том случае, если мы хотим перезаписать все содержимое.

Чтобы вызвать метод fileWrite для вашего объекта Write, добавьте эту строку:

line.fileWrite("Это текст, который мы добавили");

Меняйте текст в круглых скобках метода как вам угодно.

Чтобы сообщить пользователю о том, что происходит, вы можете напечатать что-то в этом духе:

System.out.println("Текстовый файл перезаписан");

Ваш код ReadFile теперь должен выглядеть следующим образом (мы добавили несколько комментариев):

package openandread;
import java.io.IOException;

public class ReadFile {

    public static void main(String[] args) throws IOException {
        
        String new_path = "D:/test.txt";
        
        try {
            FileData new_file = new FileData(new_path);
            String[] aryStrings = new_file.OpenAndRead();
            
            int i;
            for (i = 0; i < aryStrings.length; i++) {
                System.out.println(aryStrings[i]);
            }
        }
        catch (IOException a) {
            System.out.println(a.getMessage());
        }
        
        //============================
        //   Запись в текстовый файл
        //============================
        Write line = new Write(new_path, true);
        line.fileWrite("Это текст, который мы добавили");
        
        System.out.println("Текстовый файл перезаписан");
    }
    
}

Если хотите, добавьте блок try ... catch для записи текста. Вместо вышеизложенного напишите следующее:

//============================
//   Запись в текстовый файл
//============================
try {
    Write line = new Write(new_path, true);
    line.fileWrite("Это текст, который мы добавили");
}
catch (IOException a) {
    System.out.println(a.getMessage());
}

Теперь запустите свой код, чтобы проверить его. Вы должны увидеть содержимое вашего текстового файла в окне «Вывод», после чего появится сообщение о том, что текстовый файл был переписан:

Запись в текстовый файл - Вывод

Запустите программу еще раз, и вы должны увидеть эту новую записанную строку:

Запись в текстовый файл - Вывод2

И это все - теперь вы можете делать запись в текстовый файл и читать его содержимое с помощью Java-программы. В следующем разделе мы продолжим программирование с помощью Java Forms и создадим свой собственный калькулятор на Java.

Дата обновления: 02.09.2019

  • Текущий 5.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

/Рейтинг: 5.0/5 (2 голос(ов) всего)

Добавить комментарий (без регистрации)