0

我正在学习 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

4 回答 4

1

你没有存储任何东西data,更不用说你甚至没有初始化它(这会导致编译错误)。无论如何,您应该使用 a 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();
于 2013-08-21T14:00:14.787 回答
0

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

// 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()]);
于 2013-08-21T14:06:38.377 回答
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]);
于 2013-08-21T14:07:11.837 回答
0

那么对于一个看起来像你的while循环应该是

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

因为你什么都没有返回

于 2013-08-21T13:59:22.267 回答