Files.readAllLine () не работает после FileWriting - PullRequest
1 голос
/ 07 апреля 2020

надеюсь, что у вас все хорошо, это мой первый вопрос
У меня проблема:
Моя цель - создать java файлов из кусочков кода (полей, атрибутов, конструктора), которые я пытался сделать это путем изменения между чтением и записью файла.
Чтение файла , чтобы получить старое значение, удалить закрывающее "}"
Запись в файл : новый фрагмент кода, плюс закрытие "}"
Проблема с моей попыткой заключается в том, что Files.readAllLine () или FileWriter () не работает. Вы можете найти мой исходный код ниже.

public static void fillFile(String fileName, String name, String value) throws IOException {
        Path path = Paths.get(fileName);
        List<String> all = Files.readAllLines(path,StandardCharsets.UTF_8);
        System.out.println(" the path "+Paths.get(fileName));
        System.out.println(name + " :; "+ value);
        System.out.println("to write " + all.toString().replaceAll(", ", " ").substring(1, (all+"").replaceAll(", ", " ").length()-1)  + "\n" +  name + (name.endsWith(")")?"":" = ")+ value+ (name.endsWith(")")?"":";")+"\n } ddddddddddddddddddddddd");
        FileWriter test = new FileWriter(fileName,true);
        test.write(all.toString().replaceAll(", ", " ").substring(1, all.toString().replaceAll(", ", " ").length()-1) +  "\n" +  name + (name.endsWith(")")?"":" = ")+ value+ (name.endsWith(")")?"":";")+"\n }");
        //test.flush();
        test.close();
    }

Еще один вопрос : есть другой простой способ достичь моей цели?

1 Ответ

0 голосов
/ 07 апреля 2020

Решение заключается в том, что класс FileWriter должен иметь путь, отличный от того, который используется File.readAllLine().
Таким образом, мы должны создать временный файл, который будет скопирован в нужный файл fileName, затем мы удалим временный файл
Надеюсь, это поможет людям, которые в нем нуждаются. Это работает !!!

public static void fillFile(String fileName, String name, String value) throws IOException {
        Path path = Paths.get(fileName);
        List<String> all = null;
        if (path.toFile().exists()) { 
            all = Files.readAllLines(path,StandardCharsets.UTF_8);}
        if(all!= null) System.out.println(path + " the size of "+ all.toArray(new String[all.size()])+"");
        Path path2 = Files.createTempFile(path.getParent(),"test-file", ".java");
        Files.write(path2, ((all+"").replaceAll(", ", "\n").replaceAll("\\[", "").replaceAll("\\]", "").substring(1, ((all+"").replaceAll(", ", " ").replaceAll("\\[", "").replaceAll("\\]", "")).length()-1) +  "\n" +  name + value+ "\n" +"}").getBytes());
        Files.copy(path2, path, StandardCopyOption.REPLACE_EXISTING);
        Files.deleteIfExists(path2);
    }

...