2012-03-31 4 views
3

Ich habe diesen Fehler, wenn ich die Datei zu lesen versuchen:Sonderbare Ausnahme in thread "main" java.io.FileNotFoundException I/O Java

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) 

Aber die Sache ist, habe ich die product.txt in meinem src-Ordner.

Mein Code ist folgende:

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

Ich glaube nicht, irgendetwas mit meinem Code falsch ist. Außerdem habe ich einen ähnlichen Post über eine versteckte Erweiterung wie FILE.TXT.TXT gesehen, wie würdest du eine versteckte Erweiterung in MacOSX zeigen? Irgendwelche Vorschläge? (Wäre neben dem Problem der versteckten Erweiterung noch ein anderes Problem?)

+3

sollten Sie haben 'src \\ product.txt' als Pfad, wenn die Dateien in' src' Ordner ist. –

+3

Versuchen Sie 'File inputFile = new File (" ./src/product.txt ");' stattdessen. –

+0

Oder Datei inputFile = neue Datei ("src \\ product.txt"); – nikhil

Antwort

6

/src/product.txt ist ein absoluter Pfad, so dass das Programm versucht, die Datei zu finden im Ordner src deines Root-Pfades (/). Verwenden Sie src/product.txt, damit das Programm dies als relativen Pfad verwendet.

+1

+1 Sie sollten \\ anstelle von \ verwenden, oder noch besser, verwenden Sie '/' für unabhängiges Betriebssystem. –

+0

@ Eng.Fouad danke, ich habe meine Antwort aktualisiert –

+0

Ich bin neu in Java und vor demselben Problem, was ist, wenn die Datei in Ziel nicht src? Ich habe alles versucht, aber immer noch –

1

Es ist möglich (am wahrscheinlichsten?), Dass Ihr Java-Code nicht innerhalb des übergeordneten Ordners von src ausgeführt wird, sondern in einer Klasse oder einem Bin 'Ordner mit den kompilierten Java-.class-Dateien.

Unter der Annahme, dass ‚src‘ und ‚ist‘ im gleichen Verzeichnis ist, könnten Sie versuchen ..\\src\\product.txt

Siehe auch http://en.wikipedia.org/wiki/Path_(computing)

1
  1. Wie andere commen erwähnt, ist der Pfad absolut und verweist auf \ src \ product.txt die (hoffentlich) nicht, wo Ihre Quellen gespeichert sind.

  2. Das Pfadtrennzeichen sollte in einer Betriebssystem-unabhängigen Weise festgelegt werden, die die System.getProperty ("path.separator") -Eigenschaft verwendet. Auf einem Unix-System haben Sie Probleme mit fest codierten Backslashes als Pfadtrennzeichen. Halte es tragbar!

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

oder besser noch:

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