为什么读取txt格式的文件会出现错误?

问题描述 投票:0回答:1
static String[][] parseCSV(String fileName) throws FileNotFoundException, IOException {
    int fields;
    int lines;    

    try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\hp\\Documents\\Documents\\ID3ALGORITHM\\playtennis.txt"))) {
        String s = br.readLine();
        fields = 1;
        int index = 0;

        while ((index = s.indexOf(',', index) + 1) > 0)
            fields++;

        lines = 1;

        while (br.readLine() != null) 
            lines++;
    }
    String[][] data = new String[lines][fields];
    Scanner sc = new Scanner(new File("C:\\Users\\hp\\Documents\\Documents\\ID3ALGORITHM\\playtennis2.txt"));
    sc.useDelimiter("[,\n]");

    for (int l = 0; l < lines; l++)

        for (int f = 0; f < fields; f++)
            if (sc.hasNext())
                data[l][f] = sc.next();
            else
                error("Scan error in " + "playtennis2.txt" + " at " + l + ":" + f);

    sc.close();
    return data;
}

public static void main(String[] args) throws FileNotFoundException,IOException {
    if (args.length != 2)
        error("Expected 2 arguments: file names of training and test data");
    String[][] trainingData = parseCSV(args[0]);
    String[][] testData = parseCSV(args[1]);
    ID3ALGO classifier = new ID3ALGO();
    classifier.train(trainingData);
    classifier.printTree();
    classifier.classify(testData);         
}

收到错误信息。期待2个参数:训练和测试数据的文件名。

为什么会出现这样的情况?参数的 parseCSV 由同一文件夹中的两个不同文件组成,系统无法读取该文件。

java readfile
1个回答
2
投票

你提到的错误是由主方法的长度引起的。String[] args 一直小于2。

如果你自己写了这个程序,你就会意识到文件路径是由命令行传入主方法的。

我给你举个简单的例子。

简单的Application.java文件。

public class Application{

    public static void main(String[] args){

        if(args.length == 2) {

            System.out.println("2 args received");
        }

        System.out.println(args[0]);
        System.out.println(args[1]);

    }


}
  1. 在命令行中使用 javac Application.java
  2. 运行程序 java Application /root/dir1/dir2/file.txt /root/dir1/dir2/file2.txt
  3. arg[0] 现在是rootdir1dir2file.txt。
  4. arg[1] 现在是rootdir1dir2file.txt。

产出:

2 args received
/root/dir1/dir2/file.txt
/root/dir1/dir2/file2.txt
© www.soinside.com 2019 - 2024. All rights reserved.