这里所有专家的好日子,
我在命令提示符下运行以下命令时收到FileNotFoundException:
c:\TA\java -jar LoginCaptchaChrome.jar LoginCaptchaChrome https://2015.qa.int.www.mol.com/ C:\\TA\\TD\\Login\\Login.xlsx C:\\TA\\TR\\LoginCaptchaChrome_22082016_1838.xlsx
错误信息如下:
`Exception in thread "main" java.io.FileNotFoundException: C:\TA\TR\LoginCaptchaChrome_22082016_1838.xlsx" (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at LoginCaptchaChrome.main(LoginCaptchaChrome.java:58)
我实际上是从命令提示符和文件
传递参数LoginCaptchaChrome_22082016_1838.xlsx` is not being passed to the code line :
FileOutputStream fos = new FileOutputStream("\"" + args[3] + "\"");
在以下代码中:
public class LoginCaptchaChrome {
public static void main(String[] args) throws IOException, InterruptedException{
String tc = args[0];
String address = args[1];
String test_data = args[2];
String test_result = args[3];`
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Lam Chio Meng\\Desktop\\work\\chromedriver_win32\\chromedriver.exe");
FileOutputStream fos = new FileOutputStream("\"" + args[3] + "\"");
XSSFWorkbook workbook = new XSSFWorkbook();
希望得到专家的建议。提前谢谢。
答案 0 :(得分:2)
问题来自对如何在命令行传递参数的误解。
以shell为例。在提示符处假设此命令:
someCommand "arg with spaces"
该过程的论点实际上是:
someCommand
和arg with spaces
。是的,这只是一个论点。这意味着您遇到的问题是这一行:
new FileOutputStream("\"" + args[3] + "\"");
根本不需要前导和尾随引号。
此外,由于这是2016年,因此请勿使用FileOutputStream
。使用JSR 203:
final Path path = Paths.get(args[3]);
final OutputStream out = Files.newOutputStream(path);
查看Java程序实际看到参数的一种简单方法是这样的程序:
public final class CmdLineArgs
{
public static void main(final String... args)
{
final int len = args.length;
System.out.println("---- Begin arguments ----");
IntStream.range(0, len)
.map(index -> String.format("Arg %d: %d", index + 1, args[index])
.forEach(System.out::println);
System.out.println("---- End arguments ----");
System.exit(0);
}
}
尝试并在提示符处运行此命令,例如:
java MyClass foo bar
和
java MyClass "foo bar"
并看到差异。