2013-12-17 2 views
0

Привет, Ive создал программу Java, которая считывает строки из CSV в качестве записей данных. Проблема im get заключается в том, что программа отлично работает в консоли eclipse, однако, когда я пытаюсь запустить проблему из cmd с помощью компилятора Java, я не работаю там, где мой код указывает местоположение файла CSV, там отображается ошибка там как неизвестная. Ive пробовал все, например, перемещать файл в другой пакет или использовать какой-либо другой код для чтения файла. Im получает тот же результат, что и в eclipse, но в фактическом cmd он не работает. Bellow - это ERROR и метод, который читает файл.Входной поток не работает в командной строке

java.io.FileNotFoundException: src\PostCodeENW.csv (The system cannot find the path specified) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at Java.io.FileReader.<init>(Unknown Source) 


public void loadfile() { 
     System.out.println(System.getProperty("user.dir")); 
     String csvFile = "src/PostcodeENW.csv"; 
     BufferedReader br = null; 
     String line = ""; 

     try { 
      br = new BufferedReader(new FileReader(csvFile)); 
      while ((line = br.readLine()) != null) { 

       String[] ar = line.split("/"); 

       PostCode = ar[0].trim().replaceAll(" ", " "); 
       String[] ar1 = PostCode.split("\\s"); 
       String PostCodeP1 = ar1[0]; 
       String PostCodeP2 = ar1[1]; 
       int Easting = Integer.parseInt(ar[1]); 
       int Northing = Integer.parseInt(ar[2]); 
       String Ward = ar[3]; 

       Location geo = new Location(PostCodeP1, PostCodeP2, Easting, Northing, Ward); 
       map.put(geo.getkey(), geo.getValue()); 
//   System.out.println(PostCodeP1 + " " + PostCodeP2 + " " + Easting + " " + Northing + " " + Ward); 
      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     System.out.println("Done Adding all records"); 
     System.out.println("Database currently holds: " + map.size()); //Test how much elements are currently in the HashMap 
     } 

ответ

0

Где вы используете java-файл? Он ищет папку «src» в текущем каталоге, а затем файл «PostcodeENW.csv» в папке «src». Итак, если командная строка находится в другом каталоге, где находится эта папка и файл, это приведет к ошибке.

Попробуйте запустить файл Java в том же каталоге, где папка «ЦСИ» находится

В каталоге изменения командной строки в затмение рабочее пространство с помощью cd %HOMEPATH%/Documents/workspace Если затмение рабочего пространства находится в папке пользователя, в ваши документы, в папке, называемой рабочей областью.

+0

Наконец-то это работает, но я не понимаю, когда вы делаете новый проект в Eclipse вы получаете папку с именем src, а затем по умолчанию я импортировал CSV-файл, и он автоматически включается в пакет по умолчанию. Если я действительно смотрю в моей папке проекта, у меня есть 2 папки и 2 файла, называемые bin, src, .classpath и .project. Значит ли это, что я должен скопировать содержимое bin в каталог и удалить папку bin? Или мне нужно изменить код abit? – user3112844

+0

Если вы счастливы, что файл Java запускается из eclipse, тогда нет необходимости удалять bin. Но если вы хотите запустить файл Java из командной строки, вам нужно скопировать содержимое bin в src, чтобы файл Java мог видеть файл csv. Лично я бы рекомендовал скопировать файл csv в папки bin и src. –

0

После скомпилирования путь src больше не будет существовать. Поскольку я понимаю eclipse, он будет хранить только файлы классов jar из папки src, это означает, что после компиляции и упаковки он вряд ли будет существовать даже в файле PostcodeENW.csv.

Две вещи, которые нужно попробовать,

Во-первых, переместите PostcodeENW.csv файл в каталоге ресурсов в рамках вашего проекта

После того, как построить и упаковано, затмение будет включать в себя содержимое каталога ресурсов внутри баночки , Это означает, что эти ресурсы больше не будут доступны в виде файлов, но станут внедренные ресурсы

Во-вторых, изменить код так, что когда вы читаете файл, вы читали его в качестве встроенного ресурса, например

String csvFile = "/PostcodeENW.csv"; 
//... 
br = new BufferedReader(new InputStreamReader(getClass().getResourceAsInputStream(csvFile))); 

Nb- Я не использую затмение, поэтому я иду то, что, как я понимаю, нужно делать, но это основные идеи;)

+0

Спасибо MadProgrammer, что я знаю о правильной организации ресурсов и использовании их lol – user3112844

Смежные вопросы