0

我正在尝试做的事情:在我的测试期间,我必须从不同的文件中读取数据。(用户ID,办公室ID等。每个ID在单独的文件中)使用类read_file(file_name)的想法;where file name – 文件名,读取位置。是)我有的:

    public class Read_File {
    public static String client_number;
    private FileReader fr;

public static String read(String file_name){
String fileName=System.getProperty("user.dir")+"/src/resources/data_files/"+file_name+".txt";
try{
    FileReader inputFile = new FileReader(fileName);
    BufferedReader bufferReader = new BufferedReader(inputFile);

   String client_number = bufferReader.readLine();
    System.out.print("client number "+client_number);
   bufferReader.close();


} catch (FileNotFoundException e) {
    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
} catch (IOException e) {
    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}
    return client_number;
}
public Read_File (FileReader fr) {
    this.fr = fr;

}
}

我正在尝试运行它

  public void Find_Customer() {
    String client_number;

   Read_File file = new Read_File(fr);
   client_number = file.read("last_customer");
   System.out.print("client number"+client_number);
}

我能够从文件中读取值,但是当我试图从方法中获取这个值时 - 我有 null。我在做一些完全错误的事情。你能帮我写正确吗,拜托。

4

2 回答 2

0

你的方法是静态的。您有 2 个名为 client_number 的实体。一个是 Read_File 类的静态成员,一个是String client_number = bufferReader.readLine();.

当 try 块结束时,局部变量的作用域结束。您实际上读取了该值,但您返回了成员 client_number 的值为 null。

试试这个client_number = bufferReader.readLine();(删除这个声明前面的字符串类型)。还要注意万一出现异常返回null。

另一种解决方案是删除类成员 client_number(代码如下所示):

public class Read_File {
private FileReader fr;

public static String read(String file_name){
String fileName=System.getProperty("user.dir")+"/src/resources/data_files/"+file_name+".txt";
String client_number = null;
try{
    FileReader inputFile = new FileReader(fileName);
    BufferedReader bufferReader = new BufferedReader(inputFile);

   client_number = bufferReader.readLine();
   System.out.print("client number "+client_number);
   bufferReader.close();


} catch (FileNotFoundException e) {
    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
} catch (IOException e) {
    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}
    return client_number;
}
public Read_File (FileReader fr) {
    this.fr = fr;

}
}

作为旁注,鉴于该方法read是静态的,您不需要创建 type 的对象Read_File

于 2013-09-05T19:49:08.367 回答
0

好吧,你混淆了 java 语言的几个概念......一个快速而肮脏的修复看起来像这样:

public class Read_File {

    public static String read(String file_name){
        String client_number = "";
        String fileName=System.getProperty("user.dir")+"/src/resources" + 
            "/data_files"+file_name+".txt";
        try{
            FileReader inputFile = new FileReader(fileName);
            BufferedReader bufferReader = new BufferedReader(inputFile);

            String client_number = bufferReader.readLine();
            System.out.print("client number "+client_number);
            bufferReader.close();


        } catch (FileNotFoundException e) {
            e.printStackTrace();  
            //To change body of catch statement use File | Settings | File Templates.
        } catch (IOException e) {
            e.printStackTrace();  
            //To change body of catch statement use File | Settings | File Templates.
        }
        return client_number;
    }
}

然后你简单地这样称呼它:

String client_number = Read_File.read("last_customer");
于 2013-09-05T19:57:29.140 回答