将文件作为命令行参数传递并读取其行

时间:2010-11-29 09:55:47

标签: java file command-line

这是我在互联网上找到的用于读取文件行的​​代码,我也使用eclipse,并在其参数字段中将文件名称作为SanShin.txt传递。但它会打印出来:

Error: textfile.txt (The system cannot find the file specified)

代码:

public class Zip {
    public static void main(String[] args){
        try{
            // Open the file that is the first 
            // command line parameter
            FileInputStream fstream = new FileInputStream("textfile.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;
            //Read File Line By Line
            while ((strLine = br.readLine()) != null)   {
              // Print the content on the console
              System.out.println (strLine);
            }
            //Close the input stream
            in.close();
            }catch (Exception e){//Catch exception if any
              System.err.println("Error: " + e.getMessage());
            }


    }
}

请帮助我打印此错误的原因。 感谢

3 个答案:

答案 0 :(得分:12)

...
// command line parameter
if(argv.length != 1) {
  System.err.println("Invalid command line, exactly one argument required");
  System.exit(1);
}

try {
  FileInputStream fstream = new FileInputStream(argv[0]);
} catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}

// Get the object of DataInputStream
...

> java -cp ... Zip \path\to\test.file

答案 1 :(得分:1)

您的new FileInputStream("textfile.txt")是正确的。如果它抛出该异常,则在运行程序时当前目录中没有textfile.txt。您确定该文件的名称实际上不是testfile.txt(请注意s,而不是x,位于第三位。)


偏离主题:但您之前删除的问题询问了如何逐行读取文件(我认为您不需要删除它,FWIW)。假设你仍然是一个初学者并掌握了一些东西,一个指针:你可能想要使用FileInputStream,这是用于二进制文件,而是使用Reader中的java.io个接口/类集(包括FileReader)。此外,只要有可能,使用接口声明变量,即使在将它们初始化为特定类时也是如此,例如,Reader r = new FileReader("textfile.txt")(而不是FileReader r = ...)。

答案 2 :(得分:1)

当您指定"textfile.txt"时,操作系统将查看该文件的程序工作目录。

您可以使用new FileInputStream("C:\\full\\path\\to\\file.txt")

等指定文件的绝对路径

此外,如果您想知道程序运行的目录,请尝试以下方法: System.out.println(new File(".").getAbsolutePath())