При использовании Java невозможно сохранить в текстовый файл - PullRequest
0 голосов
/ 01 декабря 2010

Я пытаюсь получить кнопку submit для сохранения GUI в текстовом файле, я создал GUI и слушатель кнопки ... и т. Д., Но у меня возникают проблемы при создании метода который сохраняет информацию из графического интерфейса в текстовый файл.

пока у меня есть:

public void save() {

    File k1 = new File("documents/"+"newfile.txt");
    try {
       k1.createNewFile();
       FileWriter kwriter = new FileWriter(k1);

       BufferedWriter bwriter = new BufferedWriter(kwriter);
       bwriter.write(txtField1.getText().trim());
       bwriter.newLine();
       bwriter.close();

    } catch (IOException e) {
       e.printStackTrace();
    }
}

но это, похоже, не работает, ничего не происходит; я что-то пропустил?

Ответы [ 5 ]

2 голосов
/ 01 декабря 2010

Ваш файл называется .txt - возможно, вставьте имя в первый ряд:

File k1 = new File("documents/filename.txt");
1 голос
/ 01 декабря 2010

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

Вы можете проверить родительский каталог с помощью:

if(!k1.getParentFile().exists()){
    k1.getParentFile().mkdirs();
}

В качестве альтернативы вам необходимо установить файлчтобы быть более точным местом.org.apache.commons.lang.SystemUtils может помочь вам с домашним заданием пользователя.

0 голосов
/ 01 декабря 2010

Ваш код работает для меня с незначительными изменениями.

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

вместо

File k1 = new File("documents/"+"newfile.txt");

использование

File k1 = new File("newfile.txt");

Проверьте, где сгенерирован ваш файл, а затем создайте каталог там ..

Удачи !!

0 голосов
/ 01 декабря 2010

Я просто подумал, что есть более простой способ, например, у меня уже есть Jfilechoser, открывающий «сохранить как поле», когда нажимается кнопка «Отправить», так что есть более простой способ создания файла (сохранение информации графического интерфейса в текстовом файле)?

Это продолжение вашего предыдущего вопроса . Вы должны просто получить выбранный файл и написать в него с помощью любого Writer, например PrintWriter.

File file = fileChooser.getSelectedFile();
PrintWriter writer = new PrintWriter(file);
try {
    writer.println(txtField1.getText().trim());
    writer.flush();
} finally {
    writer.close();
}

Не переусердствуйте, создав new File() в другом месте и вызвав File#createFile(). Достаточно просто написать.

Смотри также:


обновление вот SSCCE , вы можете просто скопировать и запустить его.

package com.example;

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.JFileChooser;

public class Test {

    public static void main(String[] args) throws IOException {
        JFileChooser fileChooser = new JFileChooser();
        if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            PrintWriter writer = new PrintWriter(file);
            try {
                writer.println("Hello");
                writer.flush();
            } finally {
                writer.close();
            }
            Desktop.getDesktop().open(file);
        }
    }

}
0 голосов
/ 01 декабря 2010

Я предполагаю, что файл создается, но не в том каталоге, который вы ожидаете. Проверьте значение системного свойства user.dir и посмотрите, что оно показывает. Это текущий рабочий каталог вашей JVM.

Возможно, вам потребуется:

  • Укажите полный путь в коде (как предложил Мартин), например, new File("/home/foo/newfile.txt")
  • Изменить рабочий каталог JVM. Способ, которым вы это делаете, зависит от того, как вы его запускаете (например, если вы запускаете команду java непосредственно из CLI, то сначала просто переключите каталоги, если вы работаете из IDE, затем измените конфигурацию запуска и т. Д. ).

Насколько я знаю, вы не можете изменить рабочий каталог во время выполнения (см. этот вопрос SO ).

...