3

所以我有一个类,它的作用是读取文件的内容,然后根据内容做一些事情。

package maple;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JOptionPane;

public class SetSettings {

public SetSettings() {

    BufferedReader reader;

    File f = new File (Shared.saveLocation + "Settings.txt");

    String line = "";

    if (f.exists()) {
        while (line != null) {
            try {
                //System.out.println("COMES HERE");
                reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));
                line = reader.readLine();
                System.out.println(line);

            } catch (IOException e2) {
                // TODO Auto-generated catch block
                //e2.printStackTrace();
                //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0);

            }
        }
    }
}
 }

出于测试目的,我让它打印出 .txt 的每一行。它不会打印出 .txt 文件中的内容,而是会不断打印出第一行。无论 .txt 文件中有 1 行还是 100 行,它都会不断读取一行。如何让它阅读下一个并在没有更多内容时停止?

4

6 回答 6

6

您正在针对 while 循环内的文件创建一个新的 BufferedReader ,因此每次执行循环时基本上都会重置阅读器。将创建阅读器的行移到循环之外并试一试。

于 2013-07-11T20:36:35.863 回答
1

将“new BufferedReader”行移到 while 循环之外。

if (f.exists()) {
        reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));
        while (line != null) {
            try {
                //System.out.println("COMES HERE");

                line = reader.readLine();
                System.out.println(line);

            } catch (IOException e2) {
                // TODO Auto-generated catch block
                //e2.printStackTrace();
                //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0);

            }
        }
    }
于 2013-07-11T20:37:25.723 回答
1

您继续在 while 循环中重新创建您的 buffereReader。把它带到外面。

if (f.exists()) {
        reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));
        while (line != null) {
            try {
                //System.out.println("COMES HERE");
                line = reader.readLine();
                System.out.println(line);

            } catch (IOException e2) {
                // TODO Auto-generated catch block
                //e2.printStackTrace();
                //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0);

            }
        }
    }

享受:) 我们都会犯错误。

这个例子也很糟糕,你可能从那里拿走了它。 http://www.cafeaulait.org/slides/sd2000east/javaio/56.html

于 2013-07-11T20:37:28.180 回答
1

问题在于您的 while 循环中的这一行:

reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));

您每次都在创建一个新的 BufferedReader,因此您一遍又一遍地阅读第一行。将此行移到循环之外,然后重试。

我认为您还必须扩展您的 try-catch 块以捕获 IO 异常。

try {
reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));
line = reader.readLine();
while (line != null) {

            //System.out.println("COMES HERE");
            System.out.println(line);
            line = reader.readLine();
           }

} catch (IOException e2) {
            // TODO Auto-generated catch block
            //e2.printStackTrace();
            //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0);

             }
于 2013-07-11T20:38:03.807 回答
1

你应该有这个:

if (f.exists()) {
    reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));
    while (line != null) {
        try {
            //System.out.println("COMES HERE");

            line = reader.readLine();
            System.out.println(line);

        } catch (IOException e2) {
            // TODO Auto-generated catch block
            //e2.printStackTrace();
            //JOptionPane.showMessageDialog(null, "Error Code: Bx001", "Error", 0);

        }
    }
}
于 2013-07-11T20:38:43.077 回答
0

放在循环reader之前。while您正在创建多个阅读器,然后您只阅读第一行。

reader = new BufferedReader(new FileReader(Shared.saveLocation + "Settings.txt"));
while (line != null) {
    try {
        line = reader.readLine();
        System.out.println(line);
于 2013-07-11T20:37:14.047 回答