我收到了调查结果的文本文件:
我已经设法让Java读取它并使用此代码显示正常:
import java.io.*;
class Final {
public static void main (String [] args) throws Exception {
File file = new File ("C:\\Users\\loren\\Desktop\\t\\respuestas.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String st;
while ((st=br.readLine()) !=null)
System.out.println(st);
}
}
但我无法弄清楚如何将其保存在2D阵列上,是否有人有任何可能的解决方案?
答案 0 :(得分:2)
有很多方法可以做到这一点。为了有效地将文件内容放入二维(2D)阵列,您需要知道您的阵列需要多大才能将所有内容正确地装入其中,以免遇到生成 ArrayOutOfBoundsException 。在将元素放入其中之前,需要建立Array的大小。需要考虑的事项是:
这就是为什么使用像ArrayList,Map,HashMap等收集机制是解决这个问题的好方法。完成检索数据后,您始终可以将该集合转换为数组。
通过查看您的示例文件(以及它的图像:/),看起来有一个标题行,它简要描述了每个文件行中每个数据列的用途。您没有指定是否要将其作为2D数组的一部分。您也没有为2D数组指定数据类型,它是Object,String还是整数?
考虑到上述情况,我们必须假设您不希望将标题行放入数组中,并且您只需要包含在每个行列中的原始整数数据值。然后,它回答了数据数据类型问题.... Integer(int)。
以下是执行任务的一种方法:
public int[][] readDataFile(String filePath) throws FileNotFoundException {
ArrayList<int[]> list;
// Try with resources...Auto closes scanner
try (Scanner sRead = new Scanner(new File(filePath))) {
list = new ArrayList<>();
String line;
int lineCounter = 0;
while (sRead.hasNextLine()) {
line = sRead.nextLine().trim();
// Skip any blank lines
if (line.equals("")) { continue; }
lineCounter++;
// Is it a valid data file?
if (lineCounter == 1 && !line.startsWith("P1")) {
// No it's not!
JOptionPane.showMessageDialog(null, "Invalid Data File!",
"Invalid File!",
JOptionPane.WARNING_MESSAGE);
return null;
}
// Skip the Header Line
else if (line.startsWith("P1")) { continue; }
// Split the incomming line and convert the
// string values to int's
String[] strArray = line.split("\\s+");
int[] intArray = new int[strArray.length];
for(int i = 0; i < strArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
// Add to ArrayList
list.add(intArray);
}
}
// Convert the ArrayList to a 2D int Array
int[][] array = new int[list.size()][list.get(0).length];
for (int i = 0; i < list.size(); i++) {
System.arraycopy(list.get(i), 0, array[i], 0, list.get(i).length);
}
return array;
}
要使用此方法,您可以使用:
try {
int[][] a = readDataFile("C:\\Users\\loren\\Desktop\\t\\respuestas.txt");
for (int[] a1 : a) {
System.out.println(Arrays.toString(a1));
}
} catch (FileNotFoundException ex) { ex.printStackTrace(); }
答案 1 :(得分:1)
使用String数组列表,然后将此列表转换为2D String数组
在这种情况下,&#34;结果&#34;将是您想要的输出。
假设:输入文件中的单词由选项卡
import java.io.*;
import java.util.List;
import java.util.ArrayList;
class Final {
public static void main (String [] args) throws Exception {
File file = new File ("C:\\Users\\loren\\Desktop\\t\\respuestas.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String st;
List<String[]> resultList = new ArrayList<>();
while ((st=br.readLine()) !=null) {
resultList.add(st.split("\t"));
}
String[][] result = new String[resultList.size()][resultList.get(0).length];
for(int i=0; i<resultList.size(); i++) {
result[i] = resultList.get(i);
}
}
}
答案 2 :(得分:0)
1 - 逐行读取文件数据
import java.io.*;
public class FileReader {
private String fileName, fileContent = null, line;
public FileReader(String f) {
fileName = f;
reader();
}
private void reader() {
try {
fileContent = "";
// FileReader reads text files in the default encoding
Reader fileReader = new java.io.FileReader(fileName);
// Wrapping FileReader in BufferedReader
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null) {
fileContent += line;
fileContent += '\n';
}
// Closing the file
bufferedReader.close();
} catch (FileNotFoundException ex) {
System.out.println("Unable to open file '" + fileName + "'");
} catch (IOException ex) {
System.out.println("Error reading file '" + fileName + "'");
}
}
/**
* Get content of file
*
* @return String
*/
public String getFileContent() {
return fileContent;
}
}
2-Loop over lines并将它们添加到数组的特定索引中!你需要一个在每一行中跳过空格并只提取值的函数。