Java 在单独的方法中使用PrintWriter类

Java 在单独的方法中使用PrintWriter类,java,printwriter,println,Java,Printwriter,Println,您好,正在开发一个将数据写入文件的小程序。我使用if-else语句进行验证,因此需要在单独的方法中使用PrintWriter和FileWriter类/声明。然后我用主类的构造函数调用这个方法。我遇到的问题是,当我将Printwriter类移动到它自己的方法时,我无法再从我的button click aciton Listener访问它 代码: 当使用outputFile时。我收到一个错误,因为它找不到outputFile。为什么“这不起作用?”将PrintWriter定义为主计算中的实例变量 不

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

代码:


当使用outputFile时。我收到一个错误,因为它找不到outputFile。为什么“这不起作用?”

将PrintWriter定义为主计算中的实例变量 不确定你想用这个做什么

但是,如果您在同一个类中工作,则将其公开以使其工作,或者不要使用任何修饰符

所以你的代码应该是

public class MyClass
{
    public PrintWriter outputFile;
.....
}
然后在使用该方法时实例化该实例

outputFile = new PrintWriter(fw);
首先(按照惯例),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);   
  }
}

可能是范围问题
outputFile
仅在
try
块中定义,因此在其他地方使用它显然是一个问题。也许把它变成一个实例变量?谢谢,这很有效。我没有意识到,当您在try块中定义变量时,它仅在该语句中可见。我还以为是全班同学呢,谢谢你的努力。我没有意识到,当您在try块中定义变量时,它仅在该语句中可见。我假设它是类范围的。事实上,这是一个双重问题,它不适用于你,不是因为它在一个try块中,一个方法中声明的所有变量都是这个方法的局部变量,只有这个方法,尝试在方法内部声明一个int,但在try-catch块之外,这将是同一个问题。这是一个双重问题,因为即使在相同的方法中,try块中的变量也只是try块的局部变量!如果你想在外面使用它,你必须在外面声明
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);   
  }
}