输入流在命令提示符下不起作用

时间:2013-12-17 21:00:57

标签: java cmd bufferedreader filereader

你好我做了一个Java程序,它从CSV读取行作为数据记录。我得到的问题是程序在eclipse控制台中完美运行,但是当我尝试使用Java编译器从cmd运行问题时,我不能在我的代码指定CSV文件的位置,它显示错误那里是未知的。香港专业教育学院尝试了一切,如将文件移动到另一个包或使用其他一些代码来读取文件我得到相同的结果,这是在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
      }

2 个答案:

答案 0 :(得分:0)

你在哪里运行java文件?它正在当前目录中查找文件夹“src”,然后在文件夹“src”中查找文件“PostcodeENW.csv”。 因此,如果命令行与该文件夹和文件所在的目录不同,则会出错。

尝试在与“src”文件夹所在的目录相同的目录中运行java文件

在命令行中使用cd %HOMEPATH%/Documents/workspace将目录更改为eclipse工作区 如果eclipse工作区位于用户的文件夹中,则位于文档中名为workspace的文件夹中。

答案 1 :(得分:0)

编译完成后,src路径将不再存在。据我了解eclipse,它只会来自src文件夹的jar文件,这意味着,一旦编译和打包,文件PostcodeENW.csv就不太可能存在。

您需要尝试两件事,

首先,将PostcodeENW.csv文件移动到项目的资源目录中

一旦构建并打包,eclipse将包含jar内资源目录的内容。这意味着这些资源将不再可以作为文件访问,但将成为嵌入式资源

其次,更改代码,以便在读取文件时将其作为嵌入式资源读取,例如

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

Nb-我不使用eclipse,所以我要去了解我需要做的事情,但这些是基本的想法;)