从文件中读取数据的最佳方法

时间:2011-08-16 01:18:15

标签: java

  

可能重复:
  Best way to read a text file

在Java中我可以打开这样的文本文件:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));

我的问题是,您如何阅读以下文件?第一行是表示单词数的数字(830),以下行包含单词。

830  
cooking   
English  
weather  
.  
.  

我想把这些单词读成字符串数组。但是我该如何首先阅读数据?

5 个答案:

答案 0 :(得分:3)

你走在正确的轨道上;我将第一行视为特殊情况,将其解析为整数(参见Integer#parseInt(String)),然后将单词作为单独的行读取:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String numLinesStr = reader.readLine();
if (numLinesStr == null) throw new Exception("invalid file format");
List<String> lines = new ArrayList<String>();
int numLines = Integer.parseInt(numLinesStr);
for (int i=0; i<numLines; i++) {
  lines.add(reader.readLine());
}

答案 1 :(得分:1)

如果您使用的Java版本大于1.5,您还可以使用Scanner类:

Scanner sc = new Scanner(new File("someTextFile.txt"));
List<String> words = new ArrayList<String>();
int lines = sc.nextInt();

for(int i = 1; i <= lines; i++) {
    words.add(sc.nextLine());
}

String[] w = words.toArray(new String[]{});

答案 2 :(得分:0)

除非您有某些特殊原因,否则无需跟踪文件包含的行数。只需使用这样的东西:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));

String line;
while ((line = reader.readLine()) != null) {
    // ...
}

答案 3 :(得分:0)

尝试在java.io.FileReader上创建的java.io.BufferedReader类。 该对象具有readLine方法,该方法将读取文件中的下一行:

try
{
    java.io.BufferedReader in = 
        new java.io.BufferedReader(new java.io.FileReader("filename.txt"));

    String str;
    while((str = in.readLine()) != null)
    {
        ...
    }
 }
 catch(java.io.IOException ex)
 {
 }

答案 4 :(得分:0)

您可以使用反射并动态执行此操作:

 public static void read() {

            try {
                BufferedReader reader = new BufferedReader(new FileReader(
                        "filename.txt"));

                String line = reader.readLine();

                while (line != null) {
                    if (Integer.class.isAssignableFrom(line.getClass())) {
                        int number = Integer.parseInt(line);
                        System.out.println(number);
                    } else {
                        String word = line;
                        System.out.println(word);
                    }

                    line = reader.readLine();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }