所以我有一个包含这样的列表的文件
2134:193
192:1856
1092:1850
980:759
等
我想处理文件并将其添加到数组中,然后能够获取int的
像我想做的那样 System.out.println(“first +”:“+ second”;不确定存储它的最佳方式是什么,但这是我到目前为止的尝试
public static void loadList() {
BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
String line;
while ((line = br.readLine()) != null) {
String args[];
args = line.split(":");
int first = Integer.toInt(args[0]);
int second = Integer.toInt(args[1]);
System.out.println(first + " : " + second);
}
br.close();
}
答案 0 :(得分:3)
试试这个:
类
Class DataClass
{
public int first; // Deliberately public
public int second;
public DataClass(int val1, int val2){
this.first = val1;
this.second = val2;
}
}
代码
public static void loadList() {
ArrayList<DataClass> pairList = new ArrayList<DataClass>();
BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
String line;
while ((line = br.readLine()) != null) {
String args[] = line.split(":");
int first = Integer.valueOf(args[0]);
int second = Integer.valueOf(args[1]);
DataClass valPair = new DataClass(first,second);
pairList.add(valPair);
System.out.println(valPair.first + " : " + valPair.second);
}
br.close();
}
确保您有正确的尝试捕获语句
答案 1 :(得分:2)
在这里做一些Java魔术:
public static class DataValue {
protected final int first, second;
public DataValue(int first, int second) {
this.first = first;
this.second = second;
}
}
public static List<DataValue> loadList() throws FileNotFoundException, IOException {
final List<DataValue> result = new LinkedList<>();
try (BufferedReader br = new BufferedReader(new FileReader("./data.txt"))) {
String line;
String args[];
while ((line = br.readLine()) != null) {
try {
args = line.split(":");
final int first = Integer.parseInt(args[0]);
final int second = Integer.parseInt(args[1]);
System.out.println(first + " : " + second);
result.add(new DataValue(first, second));
} catch (NumberFormatException | NullPointerException | ArrayIndexOutOfBoundsExceptione) {
System.out.println("Unable to process line: " + line);
}
}
}
return result;
}
首先:这是Java 7代码,它不适用于Java 6.
面向对象的原则之一是:将数据保持在一起。因此,上述方法使用特殊的数据持有者类,以确保您不会在以后意外混淆不同行的数字。
使用try (stream) {}
概念形式Java 7可确保在所有情况下正确关闭流。在你的代码中,如果从中读取它将导致异常被抛出,那么流将被半开。
如果使用来自&#34;外部&#34;的动态数据,则必须正确检查。你永远不知道是否有人意外或故意将错误放入文件中。这就是我内心的尝试。
在您的情况下使用ArrayList不是一个好主意,因为它具有固定的大小,并且您的数据可能不是固定大小,因此在内部存储期间必须重新创建几次读。在这种情况下,链接列表表现完美(但如果执行myList.get(index)
则效果很差。)。稍后您可以像这样使用Java for-each循环:
for (DataValue value : myList) { System.out.println(value.first + " : " + value.second); }
除非必须,否则应避免在循环内声明变量。如果必须,请使用final来告诉JIT它可以对这些变量使用完全优化。
Integer.parseInt(string)
是将字符串转换为整数的正确方法。请务必阅读关于何时抛出异常的定义!
答案 2 :(得分:0)
试试这个!
public static void loadList() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
String line;
while ((line = br.readLine()) != null) {
if(line.trim().length() == 0)
continue;
String args[];
args = line.split(":");
int first = Integer.parseInt(args[0]);
int second = Integer.parseInt(args[1]);
System.out.println(first + " : " + second);
}
br.close();
}