web-dev-qa-db-ja.com

javaでtxtファイルを上書き

私が書いたコードは、選択したテキストファイルの内容を上書きすることになっていますが、追加しています。私は正確に何を間違っていますか?

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;

try {
    f2 = new FileWriter(fnew,false);
    f2.write(source);
    /*for (int i=0; i<source.length();i++)
    {
        if(source.charAt(i)=='\n')
            f2.append(System.getProperty("line.separator"));
        f2.append(source.charAt(i));
    }*/
    f2.close();
} catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}           

編集

新しいtemp.txtファイルを作成し、その中に新しいコンテンツを書き込み、このテキストファイルを削除し、temp.txtの名前をこのファイルに変更しようとしました。つまり、削除は常に失敗します。このためにユーザー権限を変更する必要はないと思いますか?

また、私のプログラムの一部には、このディレクトリ内のすべてのファイルがリストされているので、それらはプログラムによって使用されているため、削除できません。しかし、なぜ上書きされないのでしょうか?

解決済み

私の最大の「ドー」瞬間!私はそれを実行していたcmdではなく、Eclipseでコンパイルしていました。そのため、新しくコンパイルされたクラスはbinフォルダーに移動し、コマンドプロンプトを介してコンパイルされたクラスファイルはsrcフォルダーで同じままでした。私は新しいコードで再コンパイルしましたが、それは魅力的なものです。

File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
fold.delete();
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);

try {
    FileWriter f2 = new FileWriter(fnew, false);
    f2.write(source);
    f2.close();
} catch (IOException e) {
    e.printStackTrace();
}           
29

解決済み

私の最大の「ドー」瞬間!私はそれを実行していたcmdではなく、Eclipseでコンパイルしていました。そのため、新しくコンパイルされたクラスはbinフォルダーに移動し、コマンドプロンプトを介してコンパイルされたクラスファイルはsrcフォルダーで同じままでした。私は新しいコードで再コンパイルしましたが、それは魅力的なものです。

                File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
            fold.delete();
            //File temp=new File("../playlist/temp.txt");
            File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
            String source = textArea.getText();
            System.out.println(source);
            /*FileWriter f2;
            PrintWriter pw;

            try {
                f2 = new FileWriter(fnew,false);
                pw= new PrintWriter(f2);
                f2.write(source);
                /*for (int i=0; i<source.length();i++)
                {
                    if(source.charAt(i)=='\n')
                        f2.append(System.getProperty("line.separator"));
                    f2.append(source.charAt(i));
                }*/


            try {
                FileWriter f2 = new FileWriter(fnew, false);
             f2.write(source);
                f2.close();
                //fnew.renameTo(fold);
                //fold.renameTo(temp);
                //temp.deleteOnExit();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   

あなたのコードは私のためにうまく機能します。期待どおりにファイル内のテキストを置き換え、追加しませんでした。

追加したい場合は、2番目のパラメーターを設定します

new FileWriter(fnew,false);

真実に

22
user1757442

ファイルオブジェクトを初期化した後、もう1行追加します

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
fnew.createNewFile();
4
Android Killer

これにより、少し単純化され、希望どおりに動作します。

FileWriter f = new FileWriter("../playlist/"+existingPlaylist.getText()+".txt");

try {
 f.write(source);
 ...
} catch(...) {
} finally {
 //close it here
}
1
nullpotent

テキストファイルを上書きする最も簡単な方法は、パブリック静的フィールドを使用することです。

これは最初からfalseのみを使用しているため、毎回ファイルを上書きします。

public static boolean appendFile;

これを使用して、書き込みコードのappendフィールドがfalseになるように書き込みシーケンスを1回だけ許可します。

// use your field before processing the write code

appendFile = False;

File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;

try {
     //change this line to read this

    // f2 = new FileWriter(fnew,false);

    // to read this
    f2 = new FileWriter(fnew,appendFile); // important part
    f2.write(source);

    // change field back to true so the rest of the new data will
    // append to the new file.

    appendFile = true;

    f2.close();
 } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
 }           
1
user7471800