如何从 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
对象 而不是 创建文件。创建一个对象来写入文件,例如 FileWriter
或 OutputStreamWriter
.
我正在开发一个程序,该程序可以从我创建的自定义扩展名的文件中读取数据。这个想法是每次读取文件时都会创建一个错误报告。错误报告必须位于从中调用源文件的任何文件夹中。错误文件是源文件的副本,但它在每行的开头都有一个行号,并在该行的末尾指示该行是否发生错误。 (我不是要在这个问题上设置编号,这个问题只是关于创建副本)
例如,当我从命令提示符调用我的程序时:
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
对象 而不是 创建文件。创建一个对象来写入文件,例如 FileWriter
或 OutputStreamWriter
.