1

Javaでファイルを読みたい。そして、ファイルを書き換えずにそのファイルから行を削除したい。

これどうやってするの?

誰かが、RandomAccessFile の助けを借りて、ファイルを再書き込みせずにファイルを読み書きすることを提案しました。Javaを介してファイルにデータを書き込む方法は?

具体的には、そのファイルには行が含まれています。1 行には、ID、名前、職業の 3 つのフィールドが \t で区切られて含まれています。Reader または InputStream またはその他の方法でそのファイルを読み取り、指定されたキーワード (121 など) を持つ行を検索して、その行全体を削除したいと考えています。

この操作は、ファイル全体を再書き込みせずに実行する必要があります

4

4 に答える 4

4

行を削除することを含め、ファイルシステムに書き込むことなく、ファイルシステム上のファイルを変更することはできないと思います。

最終変更時刻など、ファイルのメタデータを変更せずにファイルを書きたいということですか?


更新された質問に基づいて:

ここであなたが求めていることはできないと思います。ファイルが書き込まれると、ファイルからバイトを削除することはできません。 RandomAccessFileに deleteByte または removeByte メソッドがないことに注意してください。

ファイルの内容をデータベースに移動することをお勧めします。これにより、この種のレコード指向の操作が可能になります。

別の方法として、ファイルを書き直す必要があります。ごめん!

于 2009-12-31T09:46:31.237 に答える
2

「行」は抽象的な概念です。「\n」で終わる任意のバイト列です。BufferedWritersそれらの同類は、この方法でのテキスト編集をサポートしていないため、ファイル全体を書き直す必要があります。

一般に、やりたいことは次のとおりです。

  • リーダーを開く
  • コンテンツを適切なデータ構造に読み込む
  • リーダーを閉じる
  • このデータ構造で変更する必要があるデータ/レコードを変更します
  • FileWriterで開くappend == false
  • 結果のファイルにデータ構造の内容を書き込む
  • 近いFileWriter
于 2009-12-31T09:48:16.523 に答える
0

行が削除されたかどうかを示すマーカーを行に追加します。これにより、ハードウェアの削除ではなく、ソフトウェアの削除が行われます。

新しい行を挿入する必要がある場合は、削除済みとしてマークされている行を再利用できます。

于 2009-12-31T10:21:28.500 に答える
-1

以下のコードは、単一のテキスト ファイル内の行またはフィールドを検索し、ファイルを 1 行ずつ読み取り、その行またはフィールドを " " またはその他の文字列に置き換えることができます。ここでは、pattern クラスと Matcher クラスを使用します。

これで質問が解決しない場合は、お知らせください。

java.io をインポートします。; java.util.regex をインポートします。; java.util.Properties をインポートします。パブリッククラスDeleteLine {

public static void main(String[] args) { BufferedReader br = null; { 文字列行 = null; を試してください。ファイル f = 新しいファイル("d:/xyz.txt");

String replaceString=properties.getProperty("replaceAll.String");

; br = new BufferedReader(new FileReader("d:/giri/scjp/");

          while ( (line = br.readLine()) != null )//BufferedReader contains readline method
  {

      Pattern p=Pattern.compile(searchString);/*here u an specify the line u want to delete */
      Matcher m=p.matcher(line);
      line=m.replaceAll(replaceString);/*here replace String u can " " so that it will be emptied */
      System.out.println(line);
    } 
      //System.out.println(line);
           } 

      }

} br = new BufferedReader(new FileReader("d:/xyz.txt")); 文字列行 = null;

}

catch (FileNotFoundException e)
{
    System.out.println("File couldnt find");

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

}

}

于 2009-12-31T11:01:31.287 に答える