替换相同文本文件中的行而不刷新java中的其他内容

时间:2015-03-25 15:04:25

标签: java file file-io

我想要替换某些内容,而不是将文件的整个内容与我的内容一起写入其中。

我在java中编写了以下代码:

        String update = "Pooja" + "," + "20" + "\n";
        try{
            File file = new File("Test.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader br = new BufferedReader(fileReader);


            String rline,rline1;
            while((rline = br.readLine())!=null){

                System.out.println(rline);

                if(rline.contains("Pooja") == true){
                    rline1 = rline;
                    rline = rline.replace(rline1,update);
                    System.out.println(rline);
                    break;
//                  System.out.println(score);
                }
            }
            br.close();
            FileOutputStream bw = new FileOutputStream(file);
            bw.write(rline.getBytes());

            bw.close();

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

        }

我的档案是这样的:

Pooja,10
Priya,20
Riya,30

我想将文件更新为:

Pooja,20
Priya,20
Riya,30

但是当我运行代码时,它只用以下内容刷新所有内容:

Pooja,20

我尝试了很多stackoverflow链接,但没有任何帮助。请帮忙。我是新来的。

3 个答案:

答案 0 :(得分:0)

改为使用.properties文件,类属性。

很好的教程代码here

文件会有所不同。

Pooja=20
Priya=20
Riya=30

Properties userProps = new Properties();
Path userFile = Paths.get(System.getProperty("user.home") + "/userdata.properties");

void loadUserProps() {
    try (BufferedReader in = Files.newBufferedReader(userFile,
                StandardCharsets.UTF_8)) {
        userProps .load(in);
    }
}

void saveUserProps() {
    try (BufferedWriter out = Files.newBufferedWriter(userFile,
                StandardCharsets.UTF_8)) {
        userProps .store(out, "-- " + new Date());
    }
}

loadUserProps();

String old = userProps.getProperty("Pooja", "0");
int n = Integer.parseInt(old) + 10;
userProps.setProperty("Pooja", Integer.toString(n));

saveUserProps();

使用现有的键值容器,这看起来不那么人为。

我使用UTF-8,因此可以使用完整的Unicode范围。

答案 1 :(得分:0)

除了其他人已经指出的内容之外,您可以通过在文本编辑器中使用find / replace或使用sed(http://en.wikipedia.org/wiki/Sed)来实现此目的

显然,我缺乏编写此程序的上下文,但如果问题只是文本替换,请保持对可用工具的开放态度。

答案 2 :(得分:0)

这样的事情可行:

File file = new File("Test.txt");
try (BufferedReader br = new BufferedReader(new FileReader(file));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)))) {
    String line;
    while ((line = br.readLine()) != null) {
        if (line.contains("Pooja")) {
            line = "Pooja,20";
        }
        bw.write(line);
        bw.newLine();
    }
} catch (IOException e) {
    e.printStackTrace();
}