ファイルから特定の行を削除しようとしています。私のファイルは .txt で、次のようになります。
[ITEMS]
[BANK]
[FRIENDS]
[EOF]
私のプログラムが実行されると、このファイルに行が書き込まれます。今私がやりたいのは、メソッドを呼び出すことで、[BANK] と [FRIENDS]の間のすべての行を削除するメソッドです。他のものを削除することはできません。空行を 1 行残します。
さらに情報が必要な場合は、お知らせください。
ファイルから特定の行を削除しようとしています。私のファイルは .txt で、次のようになります。
[ITEMS]
[BANK]
[FRIENDS]
[EOF]
私のプログラムが実行されると、このファイルに行が書き込まれます。今私がやりたいのは、メソッドを呼び出すことで、[BANK] と [FRIENDS]の間のすべての行を削除するメソッドです。他のものを削除することはできません。空行を 1 行残します。
さらに情報が必要な場合は、お知らせください。
これは部分的に完成したコードで、何をする必要があるかを示していますが、いくつかの欠陥がある可能性があります。Google Guava を使用しています - http://code.google.com/p/guava-libraries/
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import com.google.common.io.Files;
public class LinesDeleter {
private static boolean between;
public static void main(String[] args) throws IOException {
File file = new File("somePath");
deleteLinesBetweenFromFile("line1", "line2", file);
}
private static void deleteLinesBetweenFromFile(String start, String end,
File file) throws IOException {
List<String> readLines = null;
List<String> newLines = new ArrayList<String>();
Charset charset = Charset.defaultCharset();
readLines = Files.readLines(file, charset);
if (readLines != null) {
for (String line : readLines)
if ( !isBetweenBannedLines(line, start, end))
newLines.add(line);
File to = new File("somefile");
Files.write(writeAsSingleLines(newLines), to, charset);
}
}
private static CharSequence writeAsSingleLines(List<String> newLines) {
// TODO Auto-generated method stub
return null;
}
private static boolean isBetweenBannedLines(String line, String start,
String end) {
if (line.equals(start)) {
between = true;
return true;
}
if (line.equals(end)) {
between = false;
return true;
}
if (between)
return true;
return false;
}
}
あなたがする必要があるのは (まだ行っていない場合)、[BANK] や [FRIENDS] などのフィールドがいつ開始または終了したかを認識するためのファイル内マーカーを用意することです。ファイルを次のようにフォーマットする場合:
#Start Bank Section
<some bank data>
<some more bank data>
#End Bank Section
<junk you want to get rid of>
<more junk you want to get rid of>
<even more junk you want to get rid of>
#Start Friends Section
...
次に、各セクションを読み取って文字列に変換する関数を記述し、必要に応じて新しいファイルまたは上書きされたファイルに出力できます。
ファイルのフォーマット方法を制御できない場合は、行を区別する何らかの方法が必要になります。これには、最初にファイルのフォーマット方法に関するより詳細な情報が必要になります。
Bank セクションと Friends セクションの間に何か (空行など) を挿入する必要がある場合は、Bank セクションと Friends セクションの間に改行文字 ("\n") で構成される文字列をファイルに書き込むだけで、非常に簡単に行うことができます。ファイルへの友人セクション。