Файл не удаляется - PullRequest
       0

Файл не удаляется

0 голосов
/ 22 января 2020

по какой-то причине мой файл не удаляется с помощью f.delete (); и temp.txt не будет переименован в Materials.txt. Я не мог понять, что было не так, он выдал false, я запустил NetBeans как администратор, чтобы убедиться, что у него есть разрешения на удаление файла, и код, перед которым выполняется редактирование строки, работает нормально, кроме факта он находится на временном интервале, который не изменяется на Materials.txt. Спасибо за помощь незаконное начало выражения, ожидание; (несколько раз), а не заявление. Ты как всегда.

try {
   DefaultTableModel model= (DefaultTableModel)Table.getModel();
   int selectedRowIndex = Table.getSelectedRow();


   String updated = (jTextField1.getText()+","+jTextField2.getText()+","+jTextField3.getText()+","+jTextField4.getText()+","+jTextField5.getText()+","+jTextField6.getText()+"\r\n");

  void updateMaterialsFile(int updatedLineno = 0, String updated) throws IOException {
   Path materialsPath = Paths.get("Materials.txt");
   Path tempPath = materialsPath.resolveSibling("temp.txt");

   try (BufferedReader fr = Files.newBufferedReader(materialsPath);
           BufferedWriter fw = Files.newBufferedWriter(tempPath);) {

       for (int lineno = 0; ; ++lineno) {
           String line = fr.readLine();
           if (line == null) {
               break;
           }
           fw.write(lineno == updatedLineno ? updated : line);
           fw.write("\r\n");
       }
   } // Automatically closes fr and fw
   Files.move(tempPath, materialsPath, StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e){
   System.err.println(e);
}

Ответы [ 2 ]

1 голос
/ 22 января 2020

Не совсем ясно о проблеме синхронизации для удаления, поскольку кажется, что все закрыто хотя бы один раз.

void updateMaterialsFile(int updatedLineno, String updated) throws IOException {
    Path materialsPath = Paths.get("Materials.txt");
    Path tempPath = materialsPath.resolveSibling("temp.txt");

    try (Stream<String> lines = Files.lines(materialsPath);
            BufferedWriter fw = Files.newBufferedWriter(tempPath)) {

        AtomicInteger lineno = new AtomicInteger();
        lines.forEach(line -> {
            int lno = lineno.getAndIncrement();
            try {
                fw.write(lno == updatedLineno ? updated : line);
                fw.write("\r\n");
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
    } catch (RuntimeException e) {
        throw new IOException(e.getCause());
    }
    Files.move(tempPath, materialsPath, StandardCopyOption.REPLACE_EXISTING);
}
  • Приведенный выше код использует новый стиль, временный файл использует тот же файловая система в пути.
  • Переименование (перемещение) выполняет удаление за один шаг.
  • Вы также можете использовать временный файл (см. Файлы), который может быть в более быстрой файловой системе.
  • Использование ресурсов try-with автоматически закрывается, даже при возврате, прерывании, выбросе исключения.
  • Для чтения используется потоковая версия, у которой есть один недостаток: переданная лямбда не может бросить IOException. Также "l oop counter" lineno не должен быть назначен, поэтому не может быть int. Возможно, используйте Files.newBufferedReader.

Упрощенно:

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

/** @param updateLineno counted from 0. */
void updateMaterialsFile(int updatedLineno, String updated) throws IOException {
    Path materialsPath = Paths.get("Materials.txt");
    Path tempPath = materialsPath.resolveSibling("temp.txt");

    try (BufferedReader fr = Files.newBufferedReader(materialsPath);
            BufferedWriter fw = Files.newBufferedWriter(tempPath)) {

        for (int lineno = 0; ; ++lineno) {
            String line = fr.readLine();
            if (line == null) {
                break;
            }
            fw.write(lineno == updatedLineno ? updated : line);
            fw.write("\r\n");
        }
    } // Automatically closes fr and fw
    Files.move(tempPath, materialsPath, StandardCopyOption.REPLACE_EXISTING);
}

-

0 голосов
/ 22 января 2020

То, что я предполагаю, происходит: у вас нет файла temp.txt; Вы создаете FileWriter, который создает файл temp.txt и выводит его на него. Тем не менее, ваша переменная file1 была инициализирована до того, как ее создал файловый редактор. (Кстати, вы можете проверить, существует ли файл с File # Существует). Таким образом, вы можете сделать много вещей, чтобы изменить его, но самым простым будет перенести инициализацию нового файла («temp.txt») в конец метода. Таким образом, вы уверены, что он был создан, и сможете успешно переименовать его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...