Java - 创建一个读取文件并输出文件包含的数组的方法的最佳方法是什么?

时间:2013-08-21 13:54:50

标签: java

我正在学习Java,为了了解有关Java IO的更多信息,我正在制作一个程序来读取文件路径并返回一个包含文件中所有内容的数组。我不想指定数据必须是整数,所以我一直在使用字符串。当我尝试运行返回数组的方法时,我遇到了一个问题。我有更好的方法来编写这段代码吗?

import java.io.*;

public class OrganizeIO
    {
        public static void main(String[] args) throws Exception
    {
        String sampleData[] = readFile("C://Users/Tweak/workspace/FileIO/resources/data.txt");
        int i = 0;
        while(sampleData[i] != null)
        {
            System.out.print(sampleData[i]);
            i++;
        }
    }

public static String[] readFile(String file) throws IOException
{
    BufferedReader br = null;
    String currentLine;
    String[] data;
    br = new BufferedReader(new FileReader(file));
    int i = 0;
    while((currentLine = br.readLine()) != null)
    {
        System.out.println(currentLine);
        currentLine = data[i];
        i++;
    }

    return data[];
}

}

4 个答案:

答案 0 :(得分:1)

您没有在data中存储任何内容,更不用说您甚至没有对其进行初始化(这会导致编译错误)。你应该使用List,因为你不知道你事先要阅读多少行:

List<String> data = new ArrayList<String>();

while ((currentLine = br.readLine()) != null) {
    data.add(currentLine);
}

return data.toArray(new String[data.size()]);  // or just return the list?

另外,请不要忘记关闭BufferedReader

br.close();

答案 1 :(得分:0)

对于一个看起来像你循环应该是

的人
while((currentLine = br.readLine()) != null)
{
    System.out.println(currentLine);
    data[i] = currentLine;
    i++;
}

因为你什么也没有回来

答案 2 :(得分:0)

我认为您可以使用扫描程序类来读取文件并将其存储在列表中。

// Open the file
Scanner scanner = new Scanner(new File("C:\\Users\\Tweak\\workspace\\FileIO\\resources\\data.txt"));

// Read the file line by line
List<String> result = new ArrayList<String>();
while (scanner.hasNext())
{
    result.add(scanner.nextLine());
}

scanner.close();

// If you want an array
String sampleData[] = result.toArray(new String[result.size()]);

答案 3 :(得分:0)

由于您不知道获得了多少行,因此将读取行直接存储在数组中是不合适的,最好采用List实现:

public static List<String> readFile (File file, String encoding) throws IOException {

        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding));
        List<String> result = new LinkedList<String>();
        String line;
        while ((line = reader.readLine()) != null) {
            result.add(line);
        }
        return result;
    }

用法:

public static void main (String[] args) throws IOException {

        File file = new File("C://Users/Tweak/workspace/FileIO/resources/data.txt");
        List<String> lines = readFile(file, "UTF-8");
        for (String line : lines) {
            System.out.println(line);
        }
    }

您可以在以后将List转换为String数组,如果这是您想要的:

String[] linesArray = lines.toArray(new String[0]);