Weird exception in thread “main” java.io.FileNotFoundException I/O Java

自闭症网瘾萝莉.ら 提交于 2019-12-12 12:53:10

问题


I have this error when I am trying to read the file:

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)

But the thing is, I have the product.txt in my src folder.

My code is the following:

  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());
            }
        }

I don't think anything is wrong with my code. Also, I saw a similar post about a hidden extension like FILE.TXT.TXT, how would you show a hidden extension in MacOSX?? Any suggestions? (Would there be any other problem besides the hidden extension issue?)


回答1:


/src/product.txt is an absolute path, so the program will try to find the file in the src folder of your root path (/). Use src/product.txt so the program will use this as a relative path.




回答2:


It's possible (most likely?) that your Java code is not executing inside the parent folder of src, but instead inside a 'class' or a 'bin' folder with the compiled java .class files.

Assuming that 'src' and 'bin' are in the same directory, you could try ..\\src\\product.txt

See also http://en.wikipedia.org/wiki/Path_(computing)




回答3:


  1. As other commenters stated, the path is absolute and points to \src\product.txt which is (hopefully) not where your sources are stored.

  2. The path separator should be set in an OS-independent manner using the System.getProperty("path.separator") property. On a Unix system, you'll have trouble with hard coded backslashes as path separators. Keep it portable!

String pathSeparator = System.getProperty("path.separator");
String filePath = "." + pathSeparator + "src" + pathSeparator + "product.txt";
File file = new File(filePath);

or better yet:

// 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");
...


来源:https://stackoverflow.com/questions/9953328/weird-exception-in-thread-main-java-io-filenotfoundexception-i-o-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!