2

希望你做得很好,这是我的第一个问题
我有一个麻烦:
我的目标是从代码片段(字段,属性,构造函数)创建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();
    }

另一个问题:还有其他简单的方法可以达到我的目标吗?

4

1 回答 1

1

解决方案是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);
    }

于 2020-04-07T02:49:16.533 回答