我正在使用 Java 和 IntelliJ IDEA 开发一个字符识别项目。我的程序需要从 CSV 文件加载训练和测试数据,但即使文件路径看起来正确,我也遇到了
FileNotFoundException
。
项目结构:
project-root/
├── .idea/
├── out/
├── src/
├── data/
├── mnist_test.csv
├── mnist_train.csv
├── layers/
├── network/
└── Main.java
└── README.md
代码片段:
public class Main {
public static void main(String[] args) {
System.out.println("Starting data loading.....");
List<Image> imagesTest = new DataReader().readData("src/data/mnist_test.csv");
List<Image> imagesTrain = new DataReader().readData("src/data/mnist_train.csv");
System.out.println("Images Train size:" + imagesTrain.size());
System.out.println("Images Test size :" + imagesTest.size());
// Other code...
}
}
DataReader 类:
package data;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
public class DataReader {
private final int rows = 28;
private final int cols = 28;
public List<Image> readData(String path) {
List<Image> images = new ArrayList<>();
try (BufferedReader dataReader = new BufferedReader(new FileReader(path))) {
String line;
while ((line = dataReader.readLine()) != null) {
String[] lineItems = line.split(",");
double[][] data = new double[rows][cols];
int label = Integer.parseInt(lineItems[0]);
int i = 1;
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
data[row][col] = (double) Integer.parseInt(lineItems[i]);
i++;
}
}
images.add(new Image(data, label));
}
} catch (Exception e) {
throw new IllegalArgumentException("File not found " + path);
}
return images;
}
}
尽管文件位于正确的目录(src/data/)中,但我收到以下错误: 错误信息:
Exception in thread "main" java.lang.IllegalArgumentException: File not found src/data/mnist_test.csv
at data.DataReader.readData(DataReader.java:62)
at Main.main(Main.java:23)
我尝试过的:
我怀疑该问题可能与 IntelliJ IDEA 中的工作目录配置有关,但我不确定如何正确设置它,或者是否有其他问题导致程序无法找到文件。
如何正确配置 IntelliJ IDEA 或我的代码以确保程序可以找到 mnist_test.csv 和 mnist_train.csv 文件?
可能是权限问题,尝试使用绝对路径来检查是否不是这个问题。 如果使用绝对路径的代码有效,您应该使用类路径路径来加载任何文件
ClassLoader classLoader = Main.class.getClassLoader();
URL resource = classLoader.getResource("data/mnist_test.csv");
您正在project-root/src/data中搜索nist_test.csv和mnist_train.csv,但是,您犯的错误是您假设您正在执行源代码,而实际上您正在执行构建的项目,它可能位于项目根/输出处。因此,您需要确保您的数据文件夹及其中的文件在您的工作目录(即project-root/out)中可用。