java文件读取文件返回null

java文件读取文件返回null,java,file,Java,File,我有一个方法,它应该从文本文件返回一个字符串。但它返回空值。你能帮我弄清楚这个吗?非常感谢。 这是密码 public String findFile() { String line = ""; try { File myDir = new File("files"); File myFile = new File(myDir, "ISBN 123-654.txt"); BufferedReader br = new Bu

我有一个方法,它应该从文本文件返回一个字符串。但它返回空值。你能帮我弄清楚这个吗?非常感谢。 这是密码

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;
    }

尝试添加
br.close()位于try块的末尾。这将刷新缓冲区并提供文件中的数据。

为null时,
while
循环退出,因此该方法返回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;
}
试试这个:

File myFile = new File("files", "ISBN 123-654.txt");

当该行等于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;
}

使用谷歌番石榴非常简单快捷:

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();
}
试试看{
列表行=Files.readLines(新文件(路径到文件),Charsets.UTF_8);
//返回以逗号分隔的内容行
返回Joiner.on(“,”).join(行);
}捕获(IOE异常){
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();
}
试试看{
列表行=Files.readLines(新文件(路径到文件),Charsets.UTF_8);
//返回最后一行
如果(lines.size()>0){
返回lines.get(lines.size()-1);
}否则{
返回null;
}
}捕获(IOE异常){
e、 printStackTrace();
}

您是否尝试输入myDir的绝对路径?设置一个断点,看看会发生什么。当
line==null
时,
while
循环停止,因为您的函数在得到
null
循环后返回
line
,我尝试了很多方法。。。在这上面度过了周末和昨天。这是它实际读取文件的唯一方式。我是java新手,为什么在声明
行之后会有一组额外的括号?另外,请注意,如果导出到Eclipse之外,这将不起作用。最后,为什么有空的while循环?如果您只有一行要处理,您可以只编写
line=br.readLine()
。虽然这是一个很好的实践,但它不应该有什么区别,最好留作注释。我不理解这段代码,Adam,它在做什么,我在哪里使用它?据我所知,您希望以字符串形式读取文件内容。方法将文件中的行作为字符串列表返回。然后用细木工把它们做成一根线。