我在尝试阅读文件时遇到此错误:
Exception in thread "main" java.io.FileNotFoundException: \src\product.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at dao.Inventory.readFile(Inventory.java:30)
at view.InventoryView.init(InventoryView.java:33)
at view.InventoryView.<init>(InventoryView.java:21)
at view.InventoryView.main(InventoryView.java:211)
但问题是,我的src文件夹中有product.txt。
我的代码如下:
public void readFile() throws IOException {
// input file must be supplied in the first argument
InputStream istream;
File inputFile = new File("\\src\\product.txt");
istream = new FileInputStream(inputFile);
BufferedReader lineReader;
lineReader = new BufferedReader(new InputStreamReader(istream));
String line;
while ((line = lineReader.readLine()) != null) {
StringTokenizer tokens = new StringTokenizer(line, "\t");
// String tmp = tokens.nextToken();
// System.out.println("token " + tmp);
ActionProduct p = new ActionProduct();
prodlist.add(p);
String category = p.getCategory();
category = tokens.nextToken();
System.out.println("got category " +category);
int item = p.getItem();
item = Integer.parseInt(tokens.nextToken());
String name = p.getName();
System.out.println("got name " +name);
double price = p.getPrice();
price = Double.parseDouble(tokens.nextToken());
int units = p.getUnits();
units = Integer.parseInt(tokens.nextToken());
}
}
我认为我的代码没有任何问题。另外,我看到一篇关于像FILE.TXT.TXT这样的隐藏扩展的类似帖子,你如何在MacOSX中展示一个隐藏的扩展?有什么建议? (除了隐藏的扩展问题之外还有其他问题吗?)
答案 0 :(得分:6)
/src/product.txt
是绝对路径,因此程序将尝试在根路径(/)的src文件夹中找到该文件。使用src/product.txt
以便程序将其用作相对路径。
答案 1 :(得分:1)
有可能(最有可能的是)你的Java代码没有在src的父文件夹中执行,而是在带有编译的java .class文件的'class'或'bin'文件夹中执行。
假设'src'和'bin'在同一目录中,您可以尝试..\\src\\product.txt
答案 2 :(得分:1)
正如其他评论者所说,这条路是绝对的,并指向 \ src \ product.txt这是(希望)不在哪里 您的来源已存储。
应使用与OS无关的方式设置路径分隔符 System.getProperty(“path.separator”)属性。在Unix系统上,您将遇到硬编码反斜杠作为路径分隔符的问题。保持便携性!
String pathSeparator = System.getProperty("path.separator"); String filePath = "." + pathSeparator + "src" + pathSeparator + "product.txt"; File file = new File(filePath);
或更好:
// this could reside in a non-instantiable helper class somewhere in your project
public static String getRelativePath(String... pathElements) {
StringBuilder builder = new StringBuilder(".");
for (String pathElement : pathElements) {
builder.append(System.getProperty("path.separator");
builder.append(pathElement);
}
return builder.toString();
}
// this is where your code needs a path
...
new File(getRelativePath("src", "product.txt");
...