我一直在使用缓冲本地驱动器上的文件来解析并获取某些数据。出于测试目的,我很容易就能这样做:
public static void main(String[] args) {
fileReader fr = new fileReader();
getList lists = new getList();
File CP_file = new File("C:/Users/XYZ/workspace/Customer_Product_info.txt");
int count = fr.fileSizeInLines(CP_file);
System.out.println("Total number of lines in the file are: "+count);
List<String> lines = fr.strReader(CP_file);
....
}
}
fileReader.java文件具有以下功能:
public List<String> strReader (File in)
{
List<String> totLines = new ArrayList<String>();
try
{
BufferedReader br = new BufferedReader(new FileReader(in));
String line;
while ((line = br.readLine()) != null)
{
totLines.add(line);
}
br.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//String result = null;
return totLines;
}
现在我希望文件路径作为命令行参数传递。我尝试了一些东西,但我对此并不熟悉并且无法使其正常工作。有人可以帮助解释我需要做出的所有更改,以便将更改合并到我的代码中。
答案 0 :(得分:4)
你需要这样做:
public static void main(String[] args) {
String path = args[0];
// ...
File CP_file = new File(path);
// ...
}
答案 1 :(得分:1)
如果要将硬编码路径替换为通过命令行传递的路径,则应该能够将其作为String传递。您的代码不会读取:
...
File CP_file = new File(arg[0]); //Assuming that the path is the first argument
...
请务必引用CLI上的路径,特别是如果它包含空格或其他特殊字符。
答案 2 :(得分:1)
完整的答案是这样的:
以下代码的路径表示/etc/dir/fileName.txt
public static void main(String[] args) {
String path = args[0];
// ...
File CP_file = new File(path);
// ...
}
但是如果你想只提供一个路径,并且从那个路径你的代码读取该目录包含的所有文件,你需要将上面的内容导出为jar文件代码加上bat文件/脚本: bat文件示例:
FOR %%i IN (C:/user/dir/*.zip) do (java -cp application.jar;dependencies.jar;...;%%i)
运行脚本,您的代码将运行路径C上的文件/文件:/ user / dir / * .zip
答案 3 :(得分:1)
您的问题有两个方面:如何从命令行传递参数,以及如何在代码中读取它。
所有用于实际Java类而不是JVM的参数应该在之后放在类名中,如下所示:
C:\YOUR\WORKSPACE> java your.package.YouMainClass "C:\Users\XYZ\workspace\Customer_Product_info.txt"`
需要注意的事项:
/
vs反斜杠\
:因为你在Windows系统上,我宁愿在你的路径中使用反斜杠,特别是如果你要包含驱动器号。 Java可以使用这两种变体,但最好遵循您的SO约定。"
以允许空格:如果任何目录的名称中包含空格,则需要将路径括在双引号中,因此每次都要双引号。"C:\My path\XYZ\"
,则最后一个双引号将作为路径的一部分包含在内,因为之前的反斜杠会将其转义为\"
。相反,"C:\My path\XYZ"
会很好。main(String[])
方法现在这个很简单:正如其他人所指出的那样,带有你的路径的字符串现在应该在args[0]
中:
public static void main(String[] args) {
fileReader fr = new fileReader();
getList lists = new getList();
if (args[0] == null || args[0].trim().isEmpty()) {
System.out.println("You need to specify a path!");
return;
} else {
File CP_file = new File(args[0]);
int count = fr.fileSizeInLines(CP_file);
System.out.println("Total number of lines in the file are: "+count);
List<String> lines = fr.strReader(CP_file);
....
}
}
我添加了一些空值检查,以避免遇到问题,例如您遇到的ArrayIndexOutOfBounds
。