5

重複の可能性:
JavaJavaでテキストファイルの最初の行を置き換える
-ファイル内の行を見つけて削除します

Javaを使用してテキストファイルのテキストの最初の行を削除する方法を見つけようとしています。スキャナーを使用してそれを実行したい...tmpファイルを必要とせずにそれを実行する良い方法はありますか?

ありがとう。

4

4 に答える 4

17

ファイルが巨大な場合は、一時ファイルを使用したり、すべてのコンテンツをメモリにロードしたりせずに、その場で削除を実行する次の方法を使用できます。

public static void removeFirstLine(String fileName) throws IOException {  
    RandomAccessFile raf = new RandomAccessFile(fileName, "rw");          
     //Initial write position                                             
    long writePosition = raf.getFilePointer();                            
    raf.readLine();                                                       
    // Shift the next lines upwards.                                      
    long readPosition = raf.getFilePointer();                             

    byte[] buff = new byte[1024];                                         
    int n;                                                                
    while (-1 != (n = raf.read(buff))) {                                  
        raf.seek(writePosition);                                          
        raf.write(buff, 0, n);                                            
        readPosition += n;                                                
        writePosition += n;                                               
        raf.seek(readPosition);                                           
    }                                                                     
    raf.setLength(writePosition);                                         
    raf.close();                                                          
}         

上記のループの途中でプログラムが終了すると、行が重複したり、ファイルが破損したりする可能性があることに注意してください。

于 2012-11-01T14:17:10.240 に答える
10
Scanner fileScanner = new Scanner(myFile);
fileScanner.nextLine();

これにより、ファイルからテキストの最初の行が返され、どこにも保存されないため破棄されます。

既存のファイルを上書きするには:

FileWriter fileStream = new FileWriter("my/path/for/file.txt");
BufferedWriter out = new BufferedWriter(fileStream);
while(fileScanner.hasNextLine()) {
    String next = fileScanner.nextLine();
    if(next.equals("\n")) 
       out.newLine();
    else 
       out.write(next);
    out.newLine();   
}
out.close();

IOExceptionこの方法でいくつかをキャッチして処理する必要があることに注意してください。また、テキストファイルに改行が存在するようにするif()... else()...には、ループ内でステートメントが必要です。while()

于 2012-11-01T13:48:13.853 に答える
1

一時ファイルがない場合は、すべてをメインメモリに保持する必要があります。残りは簡単です。行をループして(最初の行は無視して)、コレクションに保存します。次に、行をディスクに書き戻します。

File path = new File("/path/to/file.txt");
Scanner scanner = new Scanner(path);
ArrayList<String> coll = new ArrayList<String>();
scanner.nextLine();
while (scanner.hasNextLine()) {
    String line = scanner.nextLine();
    coll.add(line);
}

scanner.close();

FileWriter writer = new FileWriter(path);
for (String line : coll) {
    writer.write(line);
}

writer.close();
于 2012-11-01T13:50:45.567 に答える
0

ファイルが大きすぎない場合は、バイト配列に読み取り、最初の改行シンボルを見つけて、残りの配列を位置0からファイルに書き込むことができます。または、メモリマップトファイルを使用してこれを行うこともできます。

于 2012-11-01T13:50:13.230 に答える