1

Javaプログラムと同じフォルダにあるテキストファイルを読みたい。ファイルの内容を1行ずつ読み取るために使用される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);
    }
4

2 に答える 2

1

ファイルが変更されるようにファイルに書き戻す必要がありますが、StringBufferの内容は変更せず、読み取り専用です。コンテンツを変更したら、次のように新しいコンテンツをファイルに書き込む必要があります。

try{
        FileWriter fwriter = new FileWriter(YourFile);
        BufferedWriter bwriter = new BufferedWriter(fwriter);
        bwriter.write(sb.toString());
        bwriter.close();
     }
    catch (Exception e){
          e.printStackTrace();
     }
于 2012-11-15T07:51:17.383 に答える
0

ファイルの内容を変更するのではなく、StringBufferの内容を変更します。System.out.println(sb.ToString())メソッドの前後のStringBuffer( )sb.replaceを見ると、変更行われている場所がわかります。

于 2012-11-15T07:54:08.953 に答える