在Java中我可以打开这样的文本文件:
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
我的问题是,您如何阅读以下文件?第一行是表示单词数的数字(830),以下行包含单词。
830
cooking
English
weather
.
.
我想把这些单词读成字符串数组。但是我该如何首先阅读数据?
答案 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();
}
}