【问题标题】:StringBuffer replace method doesn't workStringBuffer 替换方法不起作用
【发布时间】:2012-11-03 19:21:38
【问题描述】:

我想用我的 java 程序读取同一文件夹中的文本文件。我有一个 readFile() 用于逐行读取文件的内容。然后 setName() 将替换部分内容。我编译程序并运行没有错误。但是文件的内容根本没有改变。

谢谢

public StringBuffer readFile(){ //read file line by line
        URL url = getClass().getResource("test.txt");
        File f = new File(url.getPath());
        StringBuffer sb = new StringBuffer();
        String textinLine;

        try {
            FileInputStream fs = new FileInputStream(f);
            InputStreamReader in = new InputStreamReader(fs);
            BufferedReader br = new BufferedReader(in);

         while (true){
                textinLine = br.readLine();
                if (textinLine == null) break;
                sb.append(textinLine);
            }
            fs.close();
            in.close();
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb;

    }

    public void setName(String newName){
        StringBuffer sb = readFile();       
        int pos = sb.indexOf("UserName=");
        sb.replace(pos, pos+newName.length(), newName);
    }

【问题讨论】:

  • 我看到你在哪里读取文件,但我看不到你将结果写入新文件的位置。
  • 您可以发布您的文件吗?并且您确定您的文件包含“UserName =”字符串的确切出现吗?

标签: java replace stringbuffer


【解决方案1】:

您必须写回文件以使其更改,但您不会更改 StringBuffer 的内容,您只是在读取它。 更改内容后,您需要将新内容写入文件,例如:

try{
        FileWriter fwriter = new FileWriter(YourFile);
        BufferedWriter bwriter = new BufferedWriter(fwriter);
        bwriter.write(sb.toString());
        bwriter.close();
     }
    catch (Exception e){
          e.printStackTrace();
     }

【讨论】:

  • 请注意,您应该在 finally 块中关闭资源。对于 Java SE 7,最好使用新的自动资源管理功能。
【解决方案2】:

您不会更改文件的内容,而是更改 StringBuffer 的内容。如果您在 sb.replace 方法之前和之后查看您的 StringBuffer (System.out.println(sb.ToString())),您将看到在哪里进行了更改

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多