2

ランダムな場所にある txt ファイルに文字列を書き込もうとしています。つまり、特定の txt ファイルを編集したいのです。APPEND はしたくありませんが、行 3 に文字列を書き込むだけです。RandomAccessFile を使用して同じことを試みましたが、特定の行に書き込むと、その行のデータが置き換えられます。

egatxt-

1
2
3
4
5

私が期待する出力..

1
2
こんにちは
3
4
5

RandomAccessFiles を使用して達成したこと

1
2
こんにちは
4
5


置き換える前に3行目の内容を保存しようとしましたが、そのために readLine() 関数を使用しましたが、機能せず、予期しない結果が生じました。

4

3 に答える 3

3

メモリに対して大きすぎないファイルの場合:

ファイルを文字列に読み取ってから、次のようにすることができます。

String s = "1234567890"; //This is where you'd read the file into a String, but we'll use this for an example.
String randomString = "hi";
char[] chrArry = s.toCharArray(); //get the characters to append to the new string
Random rand = new Random();
int insertSpot = rand.nextInt(chrArry.length + 1); //Get a random spot in the string to insert the random String
//The +1 is to make it so you can append to the end of the string
StringBuilder sb = new StringBuilder();
if (insertSpot == chrArry.length) { //Check whether this should just go to the end of the string.
  sb.append(s).append(randomString);
} else {
  for (int j = 0; j < chrArry.length; j++) {
    if (j == insertSpot) {
      sb.append(randomString);
    }
    sb.append(chrArry[j]);
  }
}
System.out.println(sb.toString());//You could then output the string to the file (override it) here.

メモリに対して大きすぎるファイルの場合:

事前にランダムなスポットを特定し、そのチャンクの残りの部分の前に出力ストリームに書き込むファイルをコピーするという、ある種のバリエーションを実行できます。以下にいくつかのコードを示します。

public static void saveInputStream(InputStream inputStream, File outputFile) throws FileNotFoundException, IOException {
  int size = 4096;
  try (OutputStream out = new FileOutputStream(outputFile)) {
    byte[] buffer = new byte[size];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
      out.write(buffer, 0, length);
      //Have length = the length of the random string and buffer = new byte[size of string]
      //and call out.write(buffer, 0, length) here once in a random spot.
      //Don't forget to reset the buffer = new byte[size] again before the next iteration.
    }
    inputStream.close();
  }
}

上記のコードを次のように呼び出します。

InputStream inputStream = new FileInputStream(new File("Your source file.whatever"));
saveInputStream(inputStream, new File("Your output file.whatever"));
于 2012-06-14T16:38:51.563 に答える
1

追加と上書きの2つのオプションしかありません。ファイルはこの操作をサポートしていないため、ファイルの挿入メソッドはありません。データを挿入するには、ファイルの残りの部分を書き直して下に移動する必要があります。

于 2012-06-14T16:36:54.437 に答える
1

それを行うための API はありません。あなたができることは次のとおりです。

  1. ランダムな場所を選択
  2. 行末に行く
  3. 書き込み '\n + 'あなたのテキスト'
于 2012-06-14T16:35:35.107 に答える