我可能知道为什么我上传它时无法读取.txt文件中的下一行。 它发生在我尝试上传的所有.txt文件中,然后是system.out.println()。 在我的文本文件中它包含:猫,狗,猴子(每行一行)..但输出的值是:
[Monkey][Monkey, null][Monkey, null, null][Monkey, null, null, null][Monkey, null, null, null, null][Monkey, null, null, null, null, null][Monkey, null, null, null, null, null, null]
需要帮助。 谢谢。
并想知道为什么我可以读取.txt文件而不是.doc。我也需要提供建议。
import java.awt.List;
import java.io.*;
import java.util.ArrayList;
import javax.imageio.IIOException;
import javax.swing.JFileChooser;
public class searchforCapitalLetter {
public static void main(String[] args) throws IOException{
try {
// file chooser
JFileChooser chooser=new JFileChooser();
int returnVal = chooser.showOpenDialog(null);{
if(returnVal == JFileChooser.APPROVE_OPTION)
{ File f = chooser.getSelectedFile();}
FileInputStream fin = new FileInputStream(chooser.getSelectedFile());
DataInputStream din = new DataInputStream(fin);
BufferedReader br = new BufferedReader(new InputStreamReader(din));
ArrayList<String>list =new ArrayList<String> ();
if ((br.readLine()) != null) {
while (br.readLine() != " ") {
list.add(br.readLine());
System.out.print (list);
} br.close() ;
}//closes if statement
} // closes method dialog
} // closes try method
catch (FileNotFoundException e) {
e.printStackTrace();
} // closes catch method
} // closes method body
} // closes class method
答案 0 :(得分:2)
根据bufferedreader api:
public String readLine() 抛出IOException
读取一行文字。一条线被认为是由换行符('\ n'),a中的任何一个终止 回车('\ r')或回车后立即回车 换行。
返回:包含该行内容的字符串,不包括 任何行终止字符,如果流的末尾有,则返回null 已达成
引发:IOException - 如果发生I / O错误
请注意,您的代码出现了一些错误:
1)它调用readline()一次检查返回值并再次使用返回值。第一次调用(在while条件中)从缓冲区中删除当前值,因此每隔一行都会删除它。
2)您使用错误的比较来查看是否剩余数据。 x!= y,其中x和y都是对象,检查指针是否相等 - 是mem的位置,其中x的分配与分配y的内存位置相同。你真正想要的是将值存储在变量中。
例如:
BufferedReader in = ...;
String s = in.readLine();
while(s!=null){
...
s = in.readLine();
}
答案 1 :(得分:1)
你不能使用.doc的原因是因为.doc文件是格式化的,因此,你需要解析一些代码才能从中读取它们。
就奇怪的打印而言,在你打印它之前你会读两次代码(每次调用.readLine时,它会将扫描仪移动到下一行)。请尝试以下代码:
ArrayList<String>list =new ArrayList<String> ();
String currentLine;
while ((currentLine = br.readLine()) != null) {
list.add(currentLine);
System.out.println(currentLine);
} br.close() ;
}
这将跟踪变量中的当前行,而不是反复将扫描仪移动到下一行。另一个问题是,当文件结束时,它将为null,而不是“”
答案 2 :(得分:0)
用于从文件中读取内容的经典BufferedReader。 这是我们用Java阅读的文件:
这是写入文件的内容
这是写入文件的内容
package com.stackoverflow;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFile{
private static final String FILENAME = "D:\\test\\filename.txt";
public static void main(String[] args) {
BufferedReader br = null;
FileReader fr = null;
try {
fr = new FileReader(FILENAME);
br = new BufferedReader(fr);
String sCurrentLine;
br = new BufferedReader(new FileReader(FILENAME));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (fr != null)
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
输出:
这是写入文件的内容
这是写入文件的内容