gpt4 book ai didi

java - 如何在java中读取文本文件的特定部分

转载 作者:行者123 更新时间:2023-11-29 03:43:08 25 4
gpt4 key购买 nike

我想读取文本文件中的某些部分并将这些部分中的每一个添加到它们对应的 ArrayList 中。这是一个示例文本文件:

format: pair_diploid
option: -b 50
option: -pp +
option: -mr masked
option: -n C:\Users\Fertilak\gimp\gimp
preprocess_script: cpp
source_files {
1 types.h 1
2 actions.c 2316
3 actions.h 1
4 editor-actions.c 91
5 editor-actions.h 1
287 test-clipboard.c 1247
}
source_file_remarks {
42
: masked
152
: masked
170
: masked
}
clone_pairs {
5545 56.0-180 148.0-180
3083 62.1959-2107 62.2107-2255
3083 62.2107-2255 62.1959-2107
89 82.0-520 82.620-1140
89 82.620-1140 82.0-520
5545 148.0-180 56.0-180
12084 2865.633-694 2868.2877-2938
12084 2868.2877-2938 2865.633-694
}
clone_set_remarks {
}

我想添加到我的 2 ArrayList 的部分在 source_files 和 clone_pairs 中用方括号“{}”括起来。因此,例如,我想在 arraylist 源文件中添加所有数据,例如

    1   types.h 1
2 actions.c 2316
...etc

包含在 source_files 括号中。对于 clone_pairs 也是一样,我会将括号中的所有数据添加到 arrayList clonePairs。

这是我到目前为止所做的......但它不起作用。

    public void readFile(String file){
List<String> sourceFiles = new ArrayList<String>();
List<String> clonePairs = new ArrayList<String>();

try{
BufferedReader buff = new BufferedReader(new FileReader(file));

try{

String readBuff = buff.readLine();
while (readBuff != null){
if (readBuff.equals("source_files {") && !readBuff.equals("}")){
sourceFiles.add(readBuff);
}

else if (readBuff.equals("clone_pairs {") && !readBuff.equals("}")){
clonePairs.add(readBuff);
}

readBuff = buff.readLine();
}
}
finally{
buff.close();
}
}

catch(FileNotFoundException e){
System.out.println("File not found");
}
catch(IOException e){
System.out.println(e);
}

}

除 if-else 条件外,这段代码中几乎所有内容都正常工作。有关如何执行此操作的任何建议?

编辑

我已编辑内容并将其替换为 readBuff 字符串。对不起

编辑2

为了大家的利益,这是安德鲁提出的正确代码解决方案代码:

public void readFile(String file){
try{
BufferedReader buff = new BufferedReader(new FileReader(file));

try{

String readBuff = buff.readLine();
String section = "";
while (readBuff != null){
if (section.equals("source_files {") && !readBuff.equals("}")){
sourceFiles.add(readBuff);
} else if (section.equals("clone_pairs {") && !readBuff.equals("}")){
clonePairs.add(readBuff);
} else if (readBuff.equals("source_files {") || readBuff.equals("clone_pairs {")) {
section = readBuff;
} else if (readBuff.equals("}")) {
section = "";
}

readBuff = buff.readLine();
}

}
finally{
buff.close();
}
}

catch(FileNotFoundException e){
System.out.println("File not found");
}
catch(IOException e){
System.out.println("exceptional case");
}
}

最佳答案

您正在构建的称为状态机。您需要一些东西来跟踪您在文件中的位置 - 状态。我将其称为 section

                String readBuff = buff.readLine();
String section = "";
while (readBuff != null){
if (section.equals("source_files {") && !readBuff.equals("}")){
sourceFiles.add(readBuff);
} else if (section.equals("clone_pairs {") && !readBuff.equals("}")){
clonePairs.add(readBuff);
} else if (readBuff.equals("source_files {") || readBuff.equals("clone_pairs {")) {
section = readBuff;
} else if (readBuff.equals("}")) {
section = "";
}

readBuff = buff.readLine();
}

关于java - 如何在java中读取文本文件的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12218959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com