java文件读取文件返回null

时间:2014-04-08 11:27:08

标签: java file

我有一个方法,它应该从文本文件中返回一个字符串。但它返回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;
    }

5 个答案:

答案 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");