Странное исключение в потоке "main" java.io.FileNotFoundException I / O Java - PullRequest
3 голосов
/ 31 марта 2012

У меня появляется эта ошибка при попытке прочитать файл:

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)

Но дело в том, что у меня есть product.txt в моей папке src.

Мой код следующий:

  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 ?? Какие-либо предложения? (Будут ли какие-либо другие проблемы, кроме проблемы со скрытым расширением?)

Ответы [ 3 ]

6 голосов
/ 31 марта 2012

/src/product.txt - это абсолютный путь, поэтому программа попытается найти файл в папке src вашего корневого пути (/).Используйте src/product.txt, чтобы программа использовала его как относительный путь.

1 голос
/ 31 марта 2012
  1. Как указали другие комментаторы, путь является абсолютным и указывает на \ src \ product.txt, который (надеюсь) не там, где хранятся ваши источники.

  2. Разделитель пути должен быть установлен независимым от ОС образом с помощью свойства 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");
...
1 голос
/ 31 марта 2012

Возможно (скорее всего?), Что ваш Java-код не выполняется внутри родительской папки src, а вместо этого в папке 'class' или 'bin' с скомпилированными файлами java .class.

Предполагая, что 'src' и 'bin' находятся в одном каталоге, вы можете попробовать ..\\src\\product.txt

См. Также http://en.wikipedia.org/wiki/Path_(computing)

...