2012-04-08 10 views
0

私はJAVAの初心者です。これはこのフォーラムの最初の質問です。プロジェクトの16進エディタツールを開発中です。その一部として、テキストファイルを開いて内容を読み込んでエディタ領域に表示する小さなアプリケーションを作成する必要があります。次に、SHA-256などの地図作成アルゴリズムを使用して、テキストファイルのテキストのハッシュ値を生成する必要があります。私はそれを再利用しようとしています。私はテキストファイルの内容をエディタに表示することに立ち往生した。コードはこのようになります。文字列をJavaのwriteObject()に渡す文字列を渡しますか?

public Test() throws IOException { 

    // passes the number of array elements to the 
    // editor. 

    byte[] ar; 
    ar = new byte[16 * 16 * 100]; 
    Arrays.fill(ar, (byte) 0); 


    ByteArrayOutputStream bos=new ByteArrayOutputStream(); 
    ObjectOutputStream oos=new ObjectOutputStream(bos); 


    win = new JFrame("Hex Editor"); 
    win.setSize(654, 473); 

    JButton btnOpenFile = new JButton("Open File"); 
    btnOpenFile.setBounds(67, 38, 91, 23); 
    win.getContentPane().add(btnOpenFile); 
    btnOpenFile.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      Fileopener opener = new Fileopener(); 
      //returns the string value through getpause() method. 
          System.out.println(opener.getPause()); 
     } 
    }); 

oos.writeObject("kirandfasnvcxnz.,mvnmc,xznvmcxzmnvcmxzcccbnxz cz hajk vc jbcvj xbnzvc sbj cvxz,bcxjnzbcvjhs avcjz cxmzncvxz "); 
ar=bos.toByteArray();  

私はfileopenerのメソッドを別のクラスファイルとして定義しました。実行中にテキストファイルの内容が返されます。私の質問は、どのようにテキストファイルからこのメソッドに読み込まれている文字列値を渡す方法です。エディタに表示されるようにします。

oos.writeObject("kirandfasnvcxnz.,mvnmc,xznvmcxzmnvcmxzcccbnxz cz hajk vc jbcvj xbnzvc sbj cvxz,bcxjnzbcvjhs avcjz cxmzncvxz "); 

エディタは、上記のコード行でコンテンツを表示しています。私は、読み込まれたテキストの文字列値を返すgetterメソッドを呼び出すことによってそれを実行しようとしました。これに使用した方法は、テキストファイルの内容を表示していない

oos.writeObject("Fileopener.getPause()"); 

です。代わりにエディタは、エディタ内のカッコ内に関数を表示しています(文字列として読み込まれていると思います)。あなたの助けを前もってありがとう。あなたのコードが書かれたとおりにある場合は、次のsgmorrison @ は、あなたが値"Fileopener.getPause()"writeObjectに文字列を渡している(oos.writeObject("Fileopener.getPause()");)Fileopenerのコード() `

 package hexeditor; 

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

import javax.swing.JFileChooser; 

public class Fileopener { 

    static String pause; 

    /** 
    * 
    */ 
    public Fileopener() { 
     super(); 
     // TODO Auto-generated constructor stub 

     JFileChooser chooser = new JFileChooser(); 
     int returnVal = chooser.showOpenDialog(null); 

     StringBuffer contents = new StringBuffer(); 

     BufferedReader inFile = null; 

     if (returnVal == JFileChooser.APPROVE_OPTION) { 

      File f = chooser.getSelectedFile(); 

      try { 

       inFile = new BufferedReader(new FileReader(f)); 

       String text = null; 

       while ((text = inFile.readLine()) != null) { 

        contents.append(text) 

        .append(System.getProperty(

        "line.separator")); 

       } 

      } 

      catch (FileNotFoundException e1) { 

       e1.printStackTrace(); 

      } catch (IOException e1) { 

       e1.printStackTrace(); 

      } finally { 

       try { 

        if (inFile != null) { 

         inFile.close(); 

        } 

       } catch (IOException e1) { 

        e1.printStackTrace(); 

       } 

      } 

      // show file contents here 
      pause = contents.toString(); 
      setPause(pause); 
        } 

    } 
     public static String getPause() { 
     return pause; 
    } 

    public void setPause(String pause) { 
     this.pause = pause; 
    } 

} 

`

答えて

0

です。 fileopenerでメソッドを呼び出すのではなく、メソッド呼び出しのように見える新しいStringオブジェクトを作成しています。これを確認するには、行をoos.writeObject("Fileopener.getNonExistentMethod()");に置き換えて、何が起こるかを確認してください。

は、この問題を修正するお電話からの引用符を削除するには:

oos.writeObject(Fileopener.getPause());

UPDATEは、私は今、別の問題である可能性が高いものを見るFileopenerためのコードを見ました。 Fileopenerの一時停止フィールドはstaticと宣言されています。つまり、プロパティの同じ値がクラスのすべてのインスタンスで使用可能であり、クラス自体のプロパティとして使用できます。 getPauseも静的であると宣言されているので、同じ規則が適用されます。次のコードは言うあなたのコメントで

Fileopener opener = new Fileopener(); 
    System.out.println(opener.getPause()); 

が新しいFileopenerを作成するには、pauseは、ファイルの内容を含むように設定されます。 new Fileopener()を呼び出さずにpauseは決して設定されませんが、それでもgetPauseでアクセスできます。

ファイルを読んだ後、それが唯一のpauseの値を読み取ることは理にかなっているので、私はpausegetPauseからstaticを削除するお勧めします。面倒なコードを次のように変更する必要があります。

Fileopener opener = new Fileopener(); 
    oos.writeObject(opener.getPause()); 
+0

返信いただきありがとうございます。私はあなたの提案を最初に 'oos.writeObject(Fileopener.getPause());'で、エディタに何も表示しなかった引用符を使わずに試みました。この場合、結果は新しい文字列オブジェクトの作成であり、 'Fileopener.getNonExistentMethod()'はテキストを表示するのではなくエディタ領域に表示されますテキストファイルから読み込みます。 – kirankar

+0

'oos.writeObject(Fileopener.getPause());'が表示されない場合、 'Fileopener.getPause()'は表示するテキストを返しません。このメソッドが返すものを調べてみてください。それ以上のことができない場合は、Fileopenerのコードを共有してください。 – sgmorrison

+0

私はSystem.out.println(Fileopener.getPause())をインクルードして試しました。ヌルを返すコードで私がFileopenerのようにFileopener()のインスタンスを作成しようとしたときに、opener = new Fileopener(); System.out.println(opener.getPause());テキストファイルから読み込まれたテキストをコンソールに戻しています。質問にFileopener()のコードを含めました。 – kirankar

関連する問題