将文件读入具有未知维度的2D数组 - Java

时间:2014-01-16 17:14:06

标签: java arrays

手头的任务是读取一个具有未指定尺寸的文件...我完成此任务的唯一规定是我只允许使用数组 - 没有arraylists,列表,地图,树或任何东西其他的...只是数组。

是的,我潜入了一个示例txt文件,它显示的值如下:

0 2 3.0
1 0 2.0
2 1 7.0
2 3 1.0
3 0 6.0

但这并不是说将来用我的代码测试的所有可能文件都是相同的尺寸。

  • 我尝试过普通的.hasNext()操作来计算文件中有多少元素,但是我无法找到统一计算行数和列数的方法。
  • 我是初学者,我不知道该怎么做。我已经看过bufferedreader的例子,但无法理解它的使用以及该类中的函数使用它而不会忘记它实际上在做什么。

代码:

public void loadDistances(String fname) throws Exception {
    String file = fname;
    File f = new File(file);
    Scanner in = null;

    try {
        in = new Scanner(f);
    }
    catch (FileNotFoundException ex) {
        System.out.println("Can't find file " + file);
        System.exit(1);
    }

    int rows = 0;
    int cols = 0;

    while(in.hasNextLine()) {
        rows++;
        while(in.hasNextDouble()){
            cols++;
            // statement here which will close once reads a "end of line" character?
            // or something of the sorts
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在定义数组之前尝试找到维度... 行数可以通过以下剪切计算:

public int countDimensions(String mytxtFile) throws IOException {
    InputStream contentOfFile = new BufferedInputStream(new FileInputStream(mytxtFile));
    try {
        byte[] a = new byte[1024];
        int counter = 0;
        int readMyChars = 0;
        boolean emptyfile = true;
        while ((readMyChars = contentOfFile.read(a)) != -1) {
            emptyfile = false;
            for (int i = 0; i < readMyChars; ++i) {
                if (a[i] == '\n') { ++counter;}}
        }
        return (counter == 0 && !emptyfile) ? 1 : counter;
    } finally {contentOfFile.close();}
}

- 现在你的阵列有第一个维度......

行中元素的数量可以通过计算行中的“分隔符”(如空格或特殊字母)来定义... 我不知道你想如何将数据放入数组,或者你想用数据做什么...但如果我理解正确的话,这可能会有用......

但是注意:整个解决方案并不是很美观。效率高,不推荐。