15

abhishek.txtという名前のファイルがあり、次の行が含まれているとします。

私は、あなたの名前は何ですか。

今書きたい

アビシェク

私はAbhishekのように「私は」の後、..この特定の位置にコンテンツを直接書く方法。

4

5 に答える 5

13

ファイルにデータを挿入することはできません...ファイルシステム(一般に)は、そのような操作をサポートしていません。通常、1 つのファイルを読み取り用に、別のファイルを書き込み用に開き、ファイルの最初の部分を 1 つのストリームから別のストリームにコピーし、余分な部分を書き込み、次にファイルの 2 番目の部分をコピーします。

元のファイルを置き換えようとしている場合は、それを削除して新しいファイルを所定の場所に移動する必要があります。

場合によっては、ファイル全体を一度にメモリに読み込む方が簡単な場合があります。これは、何をしようとしているのか、およびファイルの大きさによって異なります。

于 2011-04-26T06:19:41.267 に答える
11

ファイルにデータを挿入することはできません。で特定の場所のデータを上書きできますRandomAccessFile。ただし、挿入では、その後のすべてのデータを変更する必要があります。あなたの場合、代わりに次のようなものを試してください:

File file = new File("abhishek.txt");
Scanner scanner = new Scanner(file).useDelimiter("\n");
String line = scanner.next();
String newLine = line.substring(0, 5) + "Abhishek" + line.substring(5);
FileWriter writer = new FileWriter(file);
writer.write(newLine);
writer.close();
于 2011-04-26T06:19:29.093 に答える
4

一般的に言えば、古いファイルを読み取り、メモリ内の内容を変更して、再度書き戻す必要があります。

ここでは、ファイルを一度に読み取るか、一度に小さな部分を読み取るか、既存のファイルを置き換えるかなど、多くのオプションがありますが、これは通常、使用するパターンです。

于 2011-04-26T06:19:25.003 に答える
2

次の 3 つの選択肢があります。

  1. RandomAccessFile を使用できる十分なスペースで元のエントリをパディングします (余分な末尾のスペースは気にしません。簡単ですが、ユーティリティは限られています)。
  2. これを頻繁に行う場合は、テンプレート エンジン (StringTemplate、Velocity など) を使用します。これを 1 回だけ行うと、作業が多すぎる可能性があります。
  3. それをメモリに読み込む独自の単純なテンプレート エンジンを作成し、正規表現の置換を行い、それを書き戻します。特に効率的ではありませんが、使用方法が非常に単純で制限されている場合は、おそらく最善の妥協案です。
于 2011-04-26T06:22:50.093 に答える