我有一个方法,它应该从文本文件中返回一个字符串。但它返回null。你能帮我解决这个问题吗?谢谢! 这是代码
public String findFile()
{
String line = "";
try
{
File myDir = new File("files");
File myFile = new File(myDir, "ISBN 123-654.txt");
BufferedReader br = new BufferedReader(new FileReader(myFile));
while ((line = br.readLine()) != null)
{
System.out.println(line + "1");
}
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println(line+"2");
return line;
}
字符串行应该包含如下文本:H:\ Java \ workspace \ LMS \ files \ book.jpg
非常感谢所有参与者!这是工作代码: public String findFile()
{
String line = "";
try {
File myFile = new File("files", "ISBN 123-654.txt");
BufferedReader br = new BufferedReader(new FileReader(myFile));
while ((line = br.readLine()) == null)
System.out.println(line + "1");
br.close();
}
catch (IOException e) {
e.printStackTrace();
}
System.out.println(line+"2");
return line;
}
答案 0 :(得分:2)
当while
为null时,line
循环退出,因此该方法返回null。
将line
的值分配给循环中的另一个变量(例如,连接每一行),并返回此新变量。
例如,根据您的代码:
public String findFile(){
String fileContent = "";
try {
File myDir = new File("files");
File myFile = new File(myDir, "ISBN 123-654.txt");
BufferedReader br = new BufferedReader(new FileReader(myFile));
String line;
while ((line = br.readLine()) != null){
System.out.println(line + "1");
fileContent += line;
}
}
catch (IOException e){
e.printStackTrace();
}
System.out.println(fileContent+"2");
return fileContent;
}
答案 1 :(得分:0)
当行等于null,即line == null时,存在while循环。因此,当您在while循环之后返回字符串行时,显然它将返回null。
在这里,您需要将最后一行分配给变量,并在while循环存在后返回该变量。
public String findFile()
{
String line = "";
String rtLine = null;
try
{
File myDir = new File("files");
File myFile = new File(myDir, "ISBN 123-654.txt");
BufferedReader br = new BufferedReader(new FileReader(myFile));
while ((line = br.readLine()) != null)
{
rtLine = line;
System.out.println(line + "1");
}
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println(line+"2");
return rtLine;
}
答案 2 :(得分:0)
使用Google Guava非常简单快捷:
try {
List<String> lines = Files.readLines(new File(PATH_TO_FILE), Charsets.UTF_8);
//return content lines separated by comma
return Joiner.on(",").join(lines);
} catch (IOException e) {
e.printStackTrace();
}
如果你想要最后一行:
try {
List<String> lines = Files.readLines(new File(PATH_TO_FILE), Charsets.UTF_8);
//return last line
if (lines.size() > 0) {
return lines.get(lines.size() - 1);
} else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
}
答案 3 :(得分:-1)
尝试在try块的末尾添加br.close();
。这将刷新缓冲区并从文件中提供数据。
答案 4 :(得分:-1)
试试这个:
File myFile = new File("files", "ISBN 123-654.txt");