Java 从文件到阵列获取数据时出错
我试图将文本文件中保存的数据保存到一个数组中,以便在代码中使用它,然后在该数组中搜索用户从GUI提交的字符串,但出于某种原因,我打印了数组中的数据,该数据全部为空。这是密码Java 从文件到阵列获取数据时出错,java,Java,我试图将文本文件中保存的数据保存到一个数组中,以便在代码中使用它,然后在该数组中搜索用户从GUI提交的字符串,但出于某种原因,我打印了数组中的数据,该数据全部为空。这是密码 import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Scan
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class IO {
File f = new File("DB.txt");
PrintWriter write;
Scanner input;
String[][] data;
String nameToSearch;
// search constructor
public IO(String name) {
super();
nameToSearch = name;
try {
input = new Scanner(f);
} catch (FileNotFoundException e) {
System.out.println("File not found please restart the program");
}
data = new String[linesCounter()][2];
int i = 0;
while (input.hasNext()) {
data[i][0] = input.nextLine();
data[i][1] = input.nextLine();
i++;
}
}
public IO(String name, String number) {
try {
write = new PrintWriter(new FileWriter(f, true));
} catch (IOException e) {
System.out.println("Error");
}
write.println(name);
write.println(number);
write.close();
}
int linesCounter() {
try {
input = new Scanner(f);
} catch (FileNotFoundException e) {
System.out.println("File not found please restart the program");
}
int counter = 0;
while (input.hasNext()) {
input.nextLine();
counter++;
}
return counter / 2;
}
int contactFinder() {
int i = 0;
while (input.hasNext()) {
if (data[i][0].equalsIgnoreCase(nameToSearch))
return i;
i++;
}
return -1;
}
String nameGetter() {
return data[contactFinder()][0];
}
String numGetter() {
return data[contactFinder()][1];
}
}
看起来您从文件中读取了所有行以计算有多少行,然后当您开始读取数据时,您将从您停止的位置开始,这将是文件的结尾 还值得注意的是,您可以使用轻松读取文件中的所有行 例如:
List<String> lines = FileUtils.readLines(f);
String[][] data = new String[lines.length][2];
for (int i = 0; i < lines.size(); i++) {
data[i][i % 2] = lines.get(i);
}
List lines=FileUtils.readLines(f);
字符串[][]数据=新字符串[lines.length][2];
对于(int i=0;i
如果您也不想使用(非常有用的)第三方库,您可以通过以下方法加载数据:
List<String> lines = new ArrayList<String>();
Scanner input = new Scanner(f);
while (input.hasNextLine()) {
lines.add(input.nextLine());
}
input.close();
List line=new ArrayList();
扫描仪输入=新扫描仪(f);
while(input.hasNextLine()){
line.add(input.nextLine());
}
input.close();
然后进入数组填充。我建议您使用。这有一些方法,如
readLine()
读取行,以及seek(long pos)
设置文件读取指针。您可以使用seek(0L)
重新开始读取文件。我想可能是这样,但我无法将扫描仪重置回文件的开始位置,知道怎么做吗?您可以创建一个新的,但将整个文件读取两次没有意义。只要在第一次将它加载到列表中,最好使用我添加到答案中的常用工具,然后从那里开始。请记住,扫描器基本上是一个流,必须是。我还不熟悉列表,所以我使用的是普通数组,而实际上,列表比数组容易。我在回答中添加了一个加载数据的示例。我认为这将在更少的代码中为您提供所需的数组。FileUtils是标准java类吗??因为它不能在Java上解析!!字符串模式是什么意思???@user1712638在哪里可以看到字符串模式?