我已经查看了Java查找文件的其他线程,但我仍然感到困惑。
我有一个程序,在Eclipse(Juno)中创建,作为一个java项目。我对其他任何东西都没有做任何修改,现在只有一个主类。
当程序运行时,它接受三个输入:一个数字和两个字符串。第一个字符串是它必须从中读取输入的文件的名称,第二个是它必须将输出放入的文件
如果我为输入字符串输入"input.txt",并且有一个名为input.txt的文件,Java应该在哪里找到它?我试着把它放在src、bin和项目根目录中。目前,我正在尝试访问如下文件:
File input = new File(args[1]);
其中args[1]是在开始时传递给程序的第一个字符串。当我这样做时,我得到一个错误"java.io.FileNotFoundException:input.txt(系统找不到指定的文件)"
我应该把文件放在哪里,以便Java可以找到它?
以下是相关代码:
public class main {
public static int runs;
public static File input;
public static File output;
public static String line1;
public static String line2;
public static String line3;
public static String reactions;
/**
* @param args
*/
public static void main(String[] args){
if(args.length != 3)
System.out.println("Please provide 3 arguments.");
runs = Integer.parseInt(args[0]);
File input = new File(args[1]);
File output = new File(args[2]);
System.out.println(runs);
System.out.println(input);
try {
Scanner sc = new Scanner(input);
对于这样的问题,请尝试使用getAbsolutePath()方法:
File input = new File(args[1]);
System.out.println(input.getAbsolutePath());
这会显示文件对象认为文件在哪里。这是你应该把文件放在哪里。。。或者相应地修改输入参数,以便程序在您希望文件所在的位置查找文件。
您只需要将输入文件放在项目的根文件夹中。
更新:
当您使用扫描仪获取用户输入时。然后隐藏用于args的代码,即命令行参数。
Scanner sc = new Scanner(input);
runs = sc.nextInt(); // This will store your input line
in = sc.next(); // This will store your input file name
out = sc.next(); // This will store your output file name
如果文件名不是绝对的(在*nix上不是以/
开头,在Windows上不是以C:
开头),则会在当前工作目录中查找。Java程序可以使用System.getProperty ("user.dir")
获取当前的工作目录。
在Eclipse中,您应该显式设置运行配置的执行目录。
默认使用的目录可能取决于项目配置、打包、输出目录等,因此最好(a)使用绝对路径(例如,以c:
或/
等开头)或(b)在运行配置中设置它。