我有一个文本文件,格式如下:
字符串1
String1String2
String1String2String3
...
String1Strin2String3 .....字符串(ⅰ)...字符串(n)的
我想删除此文件的某些部分,使其具有以下格式(结果文件):
字符串1
String2的
STRING3
...
的字符串(I)
的字符串(n)的
我试过这个功能,但我的输出文件总是空的:
public static void FileFormatted(String inputFile,String outputFile)
{
String FileContent = readFile(inputFile,
StandardCharsets.UTF_8);
String[] FileSentences = FileContent.split("[\n]");
for (int i = 0; i < FileSentences.length; i++)
{
StringBuilder builder = new StringBuilder();
for(int j=1;j<FileSentences.length;j++)
{
int index= FileSentences[j].indexOf("FileSentences[i]");
String temp=FileSentences[j].substring(index);
FileSentences[j]=FileSentences[j].replaceAll(temp," ");
builder.append(FileSentences[j]+ "\n");
}
writeIntoFile(builder, outputFile, true);
}
}
public static void writeIntoFile(StringBuilder stringBuilder,
String txtFilePath, boolean append) {
File file = new File(txtFilePath);
// if file doesn't exists, then create it
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileWriter fw;
try {
fw = new FileWriter(file.getAbsoluteFile(), append);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(stringBuilder.toString());
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
有人可以帮帮我吗。
答案 0 :(得分:1)
好的,首先阅读整个文件,一次性是不好的做法。想象一下,你有一个6GB的文件,这意味着当你读取它时需要6GB的RAM来存储该文件。最好逐行读取文件。
因此逻辑的目标将逐行读取。 当我们读到第一行时,我们可以得到它的长度。 当我们读取第二行时,我们知道第一行的长度,这意味着它是我们在第二行的起点。这意味着您可以使用子字符串方法,传递起始位置和结束位置。 并为第3,4行,...... n
重复此逻辑这样做的好处是你不会浪费内存,只是在文本中存储行的大小。
<强>更新强>
我已经编写了我之前建议的代码。这是非常基本的,没有验证,所以你需要添加它。但它涵盖了基础知识
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fileReader);
int startPosition = 0;
String line;
ArrayList<String> items = new ArrayList<String>();
while((line = br.readLine() ) != null)
{
items.add(line.substring(startPosition, line.length()));
System.out.println(line.substring(startPosition, line.length()));
startPosition = line.length();
}
write("test2.txt", items);
}
public static void write (String filename, ArrayList<String> items) throws IOException{
BufferedWriter outputWriter = null;
outputWriter = new BufferedWriter(new FileWriter(filename));
for (String item : items) {
outputWriter.write(item);
outputWriter.newLine();
}
outputWriter.flush();
outputWriter.close();
}
答案 1 :(得分:0)
确保孔文件中的模式一致,然后执行以下操作:
{{1}}
你也可以使用正则表达式,但这是可以接受的......