2014-09-05 51 views
0

你好工作在一个小的程序,将数据写入文件。我正在使用if else语句进行验证,因此我需要在单独的方法中使用PrintWriter和FileWriter类/声明。然后我用主类的构造函数调用这个方法。我遇到的问题是当我将Printwriter类移到它自己的方法时,我无法再从我的按钮单击aciton l istener访问它。PrintWriter类在一个单独的方法

CODE:

private void OpenFilePW(){ 
    try{ 
     String inputFileName = "addressBook.txt"; 
     FileWriter fw = new FileWriter(inputFileName, true); 
     PrintWriter outputFile = new PrintWriter(fw); 

    }catch(IOException error){ 
     JOptionPane.showConfirmDialog(null, error); 
    } 
} 

当使用OUTPUTFILE。我得到一个错误,因为它找不到outputFile。为什么不做这项工作?

+1

可能是一个范围问题? 'outputFile'只在'try'块中定义,所以在其他地方使用它显然是一个问题。也许让它成为一个实例变量? – jackarms 2014-09-05 03:22:16

+0

感谢此工作。我没有意识到,当你在try块中定义一个变量时,它只能在该语句中可见。我认为这是类宽 – 2014-09-05 04:09:04

回答

1

定义的PrintWriter在你的主CALSS一个实例变量 不知道什么是你想用这个

,但把它公开得到它的工作,或者如果你工作不使用任何修改同一类

所以你的代码应该是

public class MyClass 
{ 
    public PrintWriter outputFile; 
..... 
} 

然后实例实例,当你的方法

outputFile = new PrintWriter(fw); 
+0

感谢这工作。我没有意识到,当你在try块中定义一个变量时,它只能在该语句中可见。我认为这是全班上课。 – 2014-09-05 04:06:17

+0

事实上,这是一个双重问题,它不适合你,不是因为它在try块中,所有在方法中声明的变量都是局部的,只有这个方法,试图在方法内声明一个int,但是在外面try catch块会是同样的问题。 这是一个双重问题,因为即使在相同的方法中,try块中的变量只对try块是本地的! 如果你想使用它,你必须在外面声明它 – 2014-09-05 04:10:24

0

首先(按照惯例),Java方法名称以小写字母开头。其次,你不必返回PrintWriter你分配给一个方法局部变量 -

private PrintWriter openFilePW(){ 
    try{ 
    String inputFileName = "addressBook.txt"; 
    FileWriter fw = new FileWriter(inputFileName, true); 
    return new PrintWriter(fw); 
    } catch(IOException error) { 
    JOptionPane.showConfirmDialog(null, error); 
    } 
    return null; 
} 

或者,你可以分配PrintWriter一类级别的变量,

private PrintWriter outputFile = null; 
private void openFilePW(){ 
    try{ 
    String inputFileName = "addressBook.txt"; 
    FileWriter fw = new FileWriter(inputFileName, true); 
    outputFile = new PrintWriter(fw); 
    } catch(IOException error) { 
    JOptionPane.showConfirmDialog(null, error); 
    } 
}