Java:将文件读入数组

Nor*_*ner 30 java arrays

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

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

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

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

too*_*kit 66

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

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()]);
    }
}
Run Code Online (Sandbox Code Playgroud)

一个示例单元测试:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 和你一起回到reddit! (17认同)
  • 不应该将`bufferedReader.close()`包装在`try {} finally {}`块中? (2认同)

小智 40

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[]{});
Run Code Online (Sandbox Code Playgroud)

  • 在Java 8中,您可以调用`Files.readAllLines(filePath)`,这相当于将`StandardCharsets.UTF_8`作为字符集传递. (5认同)
  • 这适用于JAVA 7+ (4认同)