java - 如何从 cmd 参数获取文件名以创建副本?
问题描述
我正在开发一个程序,该程序从具有我制作的自定义扩展名的文件中读取。这个想法是每次读取文件时都会创建一个错误报告。错误报告必须位于调用源文件的任何文件夹中。错误文件是源文件的副本,但它在每行的开头都有一个行号,并在该行的末尾指示该行是否发生错误。(我不是想设置这个问题的编号,这个问题只是关于创建副本)
例如,当我从命令提示符调用我的程序时:
C:\MyLocation>java =jar myJavaProgram.jar myFileToRead.CustomExtension
除了读取文件之外,它还应该在名为 myFileToRead-ErrorReport.txt 的同一位置创建一个副本另外:如果源文件没有扩展名,我必须假设它仍然是正确的扩展名,所以不会总是有要替换为 .txt 的“.myCustomExtension”段
问题是我不知道如何获取文件名,因为它来自 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");
?
解决方案
首先是代码。解释出现在代码之后。
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
.
getParentFile()
类中的方法java.io.File
返回文件所在的目录。因此我有输入文件所在的目录。最后我可以在与输入文件相同的目录中创建错误报告文件,并使用所需的文件名。为此,我使用java.io.File
带有两个参数的类的构造函数。有关详细信息,请阅读javadoc。
请注意,创建File
对象不会创建文件。创建一个对象以写入文件,例如FileWriter
或OutputStreamWriter
。
推荐阅读
- javascript - 当键盘在本机反应中打开时,如何在文本输入下方显示组件?
- travis-ci - 如何上传 Lighthouse CI 结果作为 GitHub 状态检查?
- android - 无法在 Android 上启动项目:运行 adb 时出错:adb:运行 abb_exec 失败。错误:已关闭 adb:写入连接错误:已关闭
- flutter - 在颤振中清除文本字段时出现错误“getter 'year' was called on null”
- validation - 我需要获得互联网警报
- python - uwsgi:OSError:GET请求期间写入错误
- c# - 如何在 .Net 标准项目中使用 C# 代码列出 .NetStandard 库中的所有命名空间
- python - 创建 bin 并为该 bin 提取值
- c# - 如何在凭据对话框中显示域名(使用 CredUIPromptForWindowsCredentials)?
- python - 使用 Nexmon 在 Raspberry Pi 3B 上添加监控模式