如何通过批处理发送文件名并在 Java 中接受它
How to send a filename through batch & accept it in Java
好吧,我可能措辞有误,解释起来有点困难。所以这里是:
主要目标:通过批处理调用 java 三角形程序,同时通过管道传输 testcase.txt 文件列表,其中输入必须发送到 java 程序以确定三角形类型。无需在 java 程序中硬输入文件名。
问题:不确定如何从批处理命令 window.
接受要在 java 应用程序中使用的文件名
目前,我只使用一个文本文件进行测试,其中包含 3 个由 space 分隔的数字。当 运行 java 程序本身时,我可以键入文本文件的文件路径,一切都按预期进行。但遗憾的是,我不能硬编码或向用户询问该路径,因为这应该由批处理文件设置以调用这 15 个测试用例文件以发送到程序。我现在不明白的代码部分是这样的:
Scanner input = new Scanner(System.in);
String fileName = input.next();
Scanner reader = new Scanner (new File(fileName));
所以我知道 input.next() 将要求键盘输入,我怎样才能将其从键盘输入切换到批处理文件输入?如果这是有道理的。
这是我的批处理文件:
@ECHO off
set /P num1="Please enter file path: "
echo You entered %num1%
ECHO Checking for file...
if exist %num1% (
set num1=Congrats! I found the file!
C:\Users\josh\Documents\NetBeansProjects\Triangle\src\TriangleRebuild.java
) else (set num1=File does not exist)
echo %num1%
PAUSE
exit
完整代码:
/*
* Josh
Software Engineering
Structured Triangle Implementation in Java
*/
import java.io.*;
import java.util.*;
public class TriangleRebuild {
public static void main(String[] args) throws FileNotFoundException{
Scanner input = new Scanner(System.in);
String fileName = input.next();
Scanner reader = new Scanner (new File(fileName));
int a;
int b;
int c;
boolean isATriangle;
System.out.println("Enter 3 integers which are sides of a triangle: ");
a = reader.nextInt();
b = reader.nextInt();
c = reader.nextInt();
System.out.println("Side A is: " + a);
System.out.println("Side B is: " + b);
System.out.println("Side C is: " + c);
if((a < b + c) && (b < a + c) && (c < a + b)){
isATriangle = true;
}
else{
isATriangle = false;
}
if(isATriangle){
if((a == b) && (b == c)){
System.out.println("Triangle is Equilateral.");
}
else if((a != b) && (a != c) && (b != c)){
System.out.println("Triangle is Scalene.");
}
else{
System.out.println("Triangle is Isosceles.");
}
}
else{
System.out.println("Not a Triangle.");
}
if((Math.pow(c,2) == Math.pow(a,2) + Math.pow(b,2))){
System.out.println("Triangle is a right Triangle.");
}
else{
System.out.println("Triangle is not a right Triangle.");
}
}
}
您最好的选择可能如下:让批处理文件通过管道传输文本文件位置,就好像它们是在命令行中输入的一样。然后,使用这些命令行参数调用 java class 的主要方法(就像从命令行调用它一样简单,将所有批输入作为参数)。一旦进入 main 方法,就可以随心所欲地处理它们。
你知道每个 main
方法都是这样声明的:
public static void main(String[] args) {...}
args
数组表示命令行参数。也就是说,您在 cmd
window 或批处理中的 java
命令行中编写的参数。因此,例如,如果您的批处理中有一行内容为:
java TriangleRebuild abc.txt
然后在程序内部,数组 args
的值为 { "abc.txt" }
。您可以使用 args[0]
访问它。当然,你必须确保 args.length > 0
和 args[0] != null
在你使用它之前,以防万一有人忘记在命令行上写文件名。
您可以在命令行中传递多个文件名。
java TriangleRebuild abc.txt def.txt hij.txt
然后你的数组将是:{"abc.txt","def.txt","hij.txt"}
在程序中。
这样,您可以将参数从您的批处理传递到您的 Java 并在不与用户交互的情况下处理它们。
好吧,我可能措辞有误,解释起来有点困难。所以这里是: 主要目标:通过批处理调用 java 三角形程序,同时通过管道传输 testcase.txt 文件列表,其中输入必须发送到 java 程序以确定三角形类型。无需在 java 程序中硬输入文件名。
问题:不确定如何从批处理命令 window.
接受要在 java 应用程序中使用的文件名目前,我只使用一个文本文件进行测试,其中包含 3 个由 space 分隔的数字。当 运行 java 程序本身时,我可以键入文本文件的文件路径,一切都按预期进行。但遗憾的是,我不能硬编码或向用户询问该路径,因为这应该由批处理文件设置以调用这 15 个测试用例文件以发送到程序。我现在不明白的代码部分是这样的:
Scanner input = new Scanner(System.in);
String fileName = input.next();
Scanner reader = new Scanner (new File(fileName));
所以我知道 input.next() 将要求键盘输入,我怎样才能将其从键盘输入切换到批处理文件输入?如果这是有道理的。
这是我的批处理文件:
@ECHO off
set /P num1="Please enter file path: "
echo You entered %num1%
ECHO Checking for file...
if exist %num1% (
set num1=Congrats! I found the file!
C:\Users\josh\Documents\NetBeansProjects\Triangle\src\TriangleRebuild.java
) else (set num1=File does not exist)
echo %num1%
PAUSE
exit
完整代码:
/*
* Josh
Software Engineering
Structured Triangle Implementation in Java
*/
import java.io.*;
import java.util.*;
public class TriangleRebuild {
public static void main(String[] args) throws FileNotFoundException{
Scanner input = new Scanner(System.in);
String fileName = input.next();
Scanner reader = new Scanner (new File(fileName));
int a;
int b;
int c;
boolean isATriangle;
System.out.println("Enter 3 integers which are sides of a triangle: ");
a = reader.nextInt();
b = reader.nextInt();
c = reader.nextInt();
System.out.println("Side A is: " + a);
System.out.println("Side B is: " + b);
System.out.println("Side C is: " + c);
if((a < b + c) && (b < a + c) && (c < a + b)){
isATriangle = true;
}
else{
isATriangle = false;
}
if(isATriangle){
if((a == b) && (b == c)){
System.out.println("Triangle is Equilateral.");
}
else if((a != b) && (a != c) && (b != c)){
System.out.println("Triangle is Scalene.");
}
else{
System.out.println("Triangle is Isosceles.");
}
}
else{
System.out.println("Not a Triangle.");
}
if((Math.pow(c,2) == Math.pow(a,2) + Math.pow(b,2))){
System.out.println("Triangle is a right Triangle.");
}
else{
System.out.println("Triangle is not a right Triangle.");
}
}
}
您最好的选择可能如下:让批处理文件通过管道传输文本文件位置,就好像它们是在命令行中输入的一样。然后,使用这些命令行参数调用 java class 的主要方法(就像从命令行调用它一样简单,将所有批输入作为参数)。一旦进入 main 方法,就可以随心所欲地处理它们。
你知道每个 main
方法都是这样声明的:
public static void main(String[] args) {...}
args
数组表示命令行参数。也就是说,您在 cmd
window 或批处理中的 java
命令行中编写的参数。因此,例如,如果您的批处理中有一行内容为:
java TriangleRebuild abc.txt
然后在程序内部,数组 args
的值为 { "abc.txt" }
。您可以使用 args[0]
访问它。当然,你必须确保 args.length > 0
和 args[0] != null
在你使用它之前,以防万一有人忘记在命令行上写文件名。
您可以在命令行中传递多个文件名。
java TriangleRebuild abc.txt def.txt hij.txt
然后你的数组将是:{"abc.txt","def.txt","hij.txt"}
在程序中。
这样,您可以将参数从您的批处理传递到您的 Java 并在不与用户交互的情况下处理它们。