2012-12-18 34 views
2

容易的問題是我可以使用其他函數來代替println,因爲我想輸出一個非靜態變量到文件usig out.println();println的非靜態替換

這是我的代碼:

import java.io.*; 

public class main { 

String outputString ="Math.sqrt(25);" ; 
static String outputPath ="src/output.txt"; 
/** 
* @param args 
*/ 
public static void main(String[] args) throws IOException { 
    File f; 
    f= new File (outputPath); 
     //file creation 
     if(!f.exists()){ 
      f.createNewFile(); 
      System.out.println("File has been created"); 
     }else{ 
      f.delete(); 
      System.out.println("1. File has been deleted"); 
      f.createNewFile(); 
      System.out.println("2. File has been created"); 
     } 
     //adding string(text) to file 
     try{ 
      FileWriter outFile = new FileWriter(args[0]); 
      PrintWriter out = new PrintWriter(outFile); 

      out.println(outputString); 
      out.close(); 

     }catch(IOException e){ 
       e.printStackTrace(); 
      } 
    } 

} 

如果不是更多鈔票,也許有一個整體的其他方式去解決它。我的主要問題是我想編一個字符串來代碼的和平。但這似乎很難做:)任何幫助:)

+0

您當然可以使用_System.out.println_打印靜態和非靜態變量。你想做什麼不工作? – jahroy

+0

@jahroy ..鑑於他沒有在靜態方法中進行。這是什麼困擾OP。 –

+2

提示:當編譯器輸出一條錯誤消息,但你不明白它時:複製錯誤消息,並將其複製到Google:你會發現很多解釋它的含義以及如何修復你的代碼。 –

回答

7

這個問題與println()無關。它與非staticoutputString與您的類的實例相關聯,並且您的代碼不會創建此類實例。

要麼讓outputString靜態的,或者創建main一個實例:

public void doit(String[] args) throws IOException { 
    ... 
    PrintWriter out = ...; 
    out.println(outputString); 
    ... 
} 

public static void main(String[] args) throws IOException { 
    new main().doit(args); 
} 
2

println功能可以打印靜態和非靜態變量。問題在於您試圖從靜態上下文中訪問非靜態變量outputString(您的main方法)。

0

printlnPrintStream類的非靜態方法。 System也是一類,有一個靜態成員調用out類型PrintStream您可以通過調用System.out檢索。該成員在Java啓動時被初始化。

請注意,這並不意味着這是PrintStream類型的常規Object以外的任何東西,它只是它可以方便地從System靜態訪問的單例。