如何通过批处理和文件发送文件名用Java接受它

时间:2015-06-04 20:52:48

标签: java batch-file batch-processing

好的,我可能已经说错了,这有点难以解释。所以这里: 主要目标:通过批处理调用java三角形程序,同时使用必须发送到java程序的输入来管理testcase.txt文件列表以确定三角形类型。没有在java程序中输入文件名。

问题:不确定如何从批处理命令窗口接受要在java应用程序中使用的fileName。

目前,我只是使用一个文本文件进行测试,其中包含由空格分隔的3个数字。当我自己运行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.");

        }







    }

}

1 个答案:

答案 0 :(得分:0)

您知道每个main方法都是这样声明的:

public static void main(String[] args) {...}

args数组表示命令行参数。也就是说,您在java窗口或批处理中的cmd命令行上编写的参数。例如,如果您的批次中有一行说明:

java TriangleRebuild abc.txt

然后在程序内部,数组args将具有值{ "abc.txt" }。您可以使用args[0]来访问它。当然,在使用它之前,您必须确保args.length > 0args[0] != null,以防有人忘记在命令行上写入文件名。

您可以在命令行中传递多个文件名。

java TriangleRebuild abc.txt def.txt hij.txt

然后你的数组将是:程序内的{"abc.txt","def.txt","hij.txt"}

这样,您可以将批处理中的参数传递给Java并在不与用户交互的情况下处理它们。