2012-12-02 113 views
0

我在java中有一个项目,我在其中读取了一些csv数据。我必须输入具体路径。现在我想将这个项目发送给其他人,但他不应该改变路径信息。他应该能够运行该项目,而无需更改代码中的任何内容。Java中csv文件的文件路径

我已经把csv数据放到我的源文件中,但是当我尝试使用这个路径时,我得到一个异常。

BufferedReader in = new BufferedReader(new FileReader("text.csv")); 

Exception while reading csv file: java.io.FileNotFoundException: text.csv (No such file or directory) 

我正在使用IDE eclipse。

+2

如果文件不存在,则不存在。如果其他人不需要使用他们自己的数据,考虑将jar包中的csv文件打包为资源。 –

+0

并考虑'Class.getResource()' – nullpotent

+0

使用FileReader的方法将假定该文件存在于当前工作目录中。您可以确保文件确实位于当前工作目录中;或者,把它打包为戴夫牛顿提到的;或者确保该文件位于类路径中的某处并使用getResourceAsStream代替。如果有问题的程序碰巧是一个Web应用程序,最后的方法是推荐的方法,请参阅http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream。 – icey502

回答

0

将该文件放入Java源文件夹的根目录下,然后确保其文件符合您的类或bin或目标文件夹(其中所有编译类ar e去)。一旦这样做,然后如下更改代码:

InputStream inputStream = 
        getClass().getClassLoader().getResourceAsStream("text.csv"); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 

当你打包为分发项目,请确保您的text.csv封装在同一个文件夹,即类文件夹的根目录。

-1

根据项目的不同,只需让程序提示用户输入CSV文件的文件路径即可。如果它是命令行程序,请使用System.in来读取路径字符串,并用它代替"text.csv"

喜欢的东西:

Scanner input = new Scanner(System.in); 
String path = input.next(); 
BufferedReader in = new BufferedReader(new FileReader(path)); 

我还建议确保文件实际上是在路径中存在第一,但并踢回友善的信息,而不是仅仅抛出原始异常。

+0

为什么downvote? – Ivan

0

我将通过程序参数传递的.csv文件的路径,像这样:

java MyCsvReader C:\Users\Me\file.csv


,然后通过args访问传递的参数在main方法:

public static void main(String[] args) { 
    if(args.length != 1) { 
     System.out.println("Correct usage: MyCsvReader <CSV path>"); 
     System.exit(1); 
     return; 
    } 

    BufferedReader in = new BufferedReader(new FileReader(args[0])); 
    // ... 
}