Java:将文件读入数组

时间:2008-11-12 22:58:52

标签: java arrays

我有一个文件(称为“number.txt”),我想用Java读取数组。我该怎样继续这样做呢?它是一个直接的“1维”文件,包含100个数字。

问题在于我每次都会遇到异常。显然它找不到它(我确信它拼写正确)。查看代码示例时,它不指定文件的整个文件路径,只指定文件本身的名称。如果有必要,我该如何去做呢?

另外,在读取文件时,数组是否会自动包含文件的所有行,或者我是否必须创建一个循环,将每行复制到相应的下标i?

我听说过BufferedReader类,它的目的是什么,以及它如何与读取输入相关联?

4 个答案:

答案 0 :(得分:65)

以下是一些帮助您入门的示例代码:

package com.acme;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FileArrayProvider {

    public String[] readLines(String filename) throws IOException {
        FileReader fileReader = new FileReader(filename);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        List<String> lines = new ArrayList<String>();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            lines.add(line);
        }
        bufferedReader.close();
        return lines.toArray(new String[lines.size()]);
    }
}

一个单元测试示例:

package com.acme;

import java.io.IOException;

import org.junit.Test;

public class FileArrayProviderTest {

    @Test
    public void testFileArrayProvider() throws IOException {
        FileArrayProvider fap = new FileArrayProvider();
        String[] lines = fap
                .readLines("src/main/java/com/acme/FileArrayProvider.java");
        for (String line : lines) {
            System.out.println(line);
        }
    }
}

希望这有帮助。

答案 1 :(得分:38)

import java.io.File;

import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;

import java.util.List;

// ...

Path filePath = new File("fileName").toPath();
Charset charset = Charset.defaultCharset();        
List<String> stringList = Files.readAllLines(filePath, charset);
String[] stringArray = stringList.toArray(new String[]{});

答案 2 :(得分:4)

Apache Commons I / O提供FileUtils #readLines(),除了巨大的文件外,它们应该没有问题:http://commons.apache.org/io/api-release/index.html。 2.1发行版包括FileUtils.lineIterator(),它适用于大型文件。 Google的Guava库包含类似的实用程序。

答案 3 :(得分:0)

您应该能够在Java中使用正斜杠来引用文件位置。

BufferedReader类用于包装其他文件读取器,而read方法可能效率不高。可以在Java APIs中找到更详细的说明。

Toolkit使用BufferedReader可能就是你所需要的。