如何从 cmd 参数获取文件名以创建副本?

How to get File name from cmd argument to create a copy?

我正在开发一个程序,该程序可以从我创建的自定义扩展名的文件中读取数据。这个想法是每次读取文件时都会创建一个错误报告。错误报告必须位于从中调用源文件的任何文件夹中。错误文件是源文件的副本,但它在每行的开头都有一个行号,并在该行的末尾指示该行是否发生错误。 (我不是要在这个问题上设置编号,这个问题只是关于创建副本)

例如,当我从命令提示符调用我的程序时:

C:\MyLocation>java =jar myJavaProgram.jar myFileToRead.CustomExtension 

除了读取文件外,它还应该在名为 myFileToRead-ErrorReport.txt 的同一位置创建一个副本 另外:如果源文件没有扩展名,我必须假设它仍然是正确的扩展名,所以不会总是有一个 '.myCustomExtension' 段替换成 .txt

问题是我不知道如何获取文件名,因为它来自 main 方法的 args 列表。我正在使用以下内容读取文件

public static void main(String[] args) throws FileNotFoundException {
        try{
            File inputFile = new File(args[0]);
        
            Scanner sc = new Scanner(inputFile);
            while(sc.hasNext()){
                System.out.println(sc.nextLine());
            }
        } catch (FileNotFoundException ex) {
            System.out.println(ex.getMessage());
            System.out.println("File not found.");
        }
    }

那么我怎样才能得到那个文件名来制作类似

的东西

File errorReport = new File("./" + inputFileName + ".txt"); ?

这是创建文件的代码示例,文件名从 cmd 行作为参数传递并获得相同的文件名:

Class Demo{
         public static void main(String[]args){
        String path ="<path of file>"
        String name= args[0];
        File f = new File(path+name+".txt");
        f.createNewFile(); //create file
    System.out.println(f.getName()); // will give you the file name
    }
 }

cmd line : java -cp . Demo.java <filename>

注意:如果您的 class 文件存在于当前目录

中,则在 cmd 中使用“.

您可以参考代码并根据您的要求进行修改。 希望这就是您要找的。

首先是代码。解释出现在代码之后。

public static void main(String[] args) {
    if (args.length < 1) {
        System.out.println("ERROR: Missing filename argument.");
    }
    else {
        String filename = args[0];
        if (filename.length() == 0) {
            System.out.println("ERROR: Empty filename argument.");
        }
        else {
            if (!filename.endsWith(".CustomExtension")) {
                filename += ".CustomExtension";
            }
            String name = filename.substring(0, filename.indexOf(".CustomExtension"));
            name += "-ErrorReport.txt";
            File inputFile = new File(filename);
            File directory = inputFile.getParentFile();
            File errorReport = new File(directory, name);
            System.out.println(errorReport.getAbsolutePath());
        }
    }
}

我养成了检查参数的习惯。因此,我首先检查是否提供了文件名。如果是,那么我检查它是否不是空字符串。请注意,我省略了一些检查,例如检查命名文件是否存在且可读。

您在问题中写道,文件名参数可能包含也可能不包含 .CustomExtension。因此,我检查提供的名称是否以所需的扩展名结尾,并在必要时附加它。现在,因为我知道文件名以什么结尾,这意味着名称的必需部分是扩展名之前的所有内容,这就是对 substring() 的调用给我的内容。

一旦我有了所需的名称,我就会附加您要附加的部分,即 -ErrorReport.txt

Method getParentFile() in class java.io.File returns 文件所在的目录。因此我有输入文件所在的目录。最后我可以在与输入文件相同的目录中创建错误报告文件,并使用所需的文件名。为此,我使用带有两个参数的 class java.io.File 的构造函数。阅读 javadoc 了解详细信息。

请注意,创建 File 对象 而不是 创建文件。创建一个对象来写入文件,例如 FileWriterOutputStreamWriter.