2016-04-10 3 views
0

からデータを取得できませんし、すべてが完璧に動作します:は、ファイルを保存するために<code>JFileChooser</code>を使用したファイル

private void saveFileDialog(){ 

    fileChooser = new JFileChooser(System.getProperty("employees.dat")); 
    disableTextField(fileChooser.getComponents()); 

    fileChooser.setSelectedFile(new File("employees.dat")); 
    fileChooser.setDialogTitle("File to save"); 

    int userSelection = fileChooser.showSaveDialog(this); 
    if (userSelection == JFileChooser.APPROVE_OPTION) { 
     File fileToSave = fileChooser.getSelectedFile(); 
     save(); 
     System.out.println("Save as file: " + fileToSave.getAbsolutePath()); 
    } 
} 

方法save()呼び出す:

public void save(){ 
    RandomAccessFile file = null; 
    try { 
     file = new RandomAccessFile("employees.dat", "rw"); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try{ 
     for(Employee em: list){ 
     if(list != null){ 

     file.writeUTF(em.getPps()); 
     file.writeUTF(em.getName()); 
     file.writeUTF(em.getSurname()); 
     file.writeUTF(em.getGender()); 
     file.writeUTF(em.getDep()); 
     file.writeInt(em.getSalary()); 
     file.writeUTF(em.getFullTime()); 
      } 
     } 

     file.close(); 

    }catch(IOException e1){ 
     System.out.println("Cant save"); 
    } 
} 

オープニング自分のコンピュータ上のファイルとすべてのデータが記録され、保存されます。

問題は次のとおりです。

public void getFromFile(){ 
    RandomAccessFile file = null; 
    try { 
     file = new RandomAccessFile("employees.dat", "rw"); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try{ 
    while (file.getFilePointer() < file.length()){ 

      Employee em = new Employee(); 

       System.out.println("Saving"); 
       em.setPps(file.readUTF()); 
       em.setName(file.readUTF()); 
       em.setSurname(file.readUTF()); 
       em.setGender(file.readBoolean()); 
       em.setDep(file.readUTF()); 
       em.setSalary(file.readInt()); 
       em.setFulltime(file.readBoolean()); 
       list.add(em); 

    } 
     file.close(); 
     }catch(IOException e1){ 
      System.out.println("Cant save"); 
      e1.printStackTrace(); 
     } 
} 

マイJFileChooserのファイルから取得するために:私はここでは、ファイルから

データを得ることができない私のgetFromFile方法がある

openItem.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     fileChooser = new JFileChooser("."); 

     fileChooser.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      System.out.println("Action"); 

      } 
     }); 

     int status = fileChooser.showOpenDialog(null); 

     if (status == JFileChooser.APPROVE_OPTION) { 

      File selectedFile = fileChooser.getSelectedFile(); 
      getFromFile(); 

      System.out.println(selectedFile.getParent()); 
      System.out.println(selectedFile.getName()); 
     } else if (status == JFileChooser.CANCEL_OPTION) { 
      System.out.println("calceled"); 

     } 

     } 
}); 

コンソールは、システムを私に示して.out.println( "Saving");次にSystem.out.println( "Cant save"); 。すべてがうまくいくはずですが、ファイルは空で、私のプログラムには新しいものは何も表示されません。ここで

は、今後の例外を以下の通りです:

java.io.EOFException 
     at java.io.RandomAccessFile.readFully(RandomAccessFile.java:399) 
     at java.io.DataInputStream.readUTF(DataInputStream.java:592) 
     at java.io.RandomAccessFile.readUTF(RandomAccessFile.java:921) 
+1

の代わりに独自のエラーメッセージを印刷し、あなたの人生がずっと楽になるだろうJAXBのようなものを使用して検討したいと同じ結果

を達成するであろう'e1.printStackTrace()'を使って実際に問題が何かを確認してください。 – Titus

+0

ありがとうございます。今私の投稿を更新します。 – Alex

+0

私は混乱しています、あなたは 'saveFileDialog'でどのファイルを選択したのか' save'はどのように知っていますか?現在の作業ディレクトリにファイルを保存するだけです – MadProgrammer

答えて

1

あなたの "コア" の問題はここにありそうです...

System.out.println("Saving"); 
em.setPps(file.readUTF()); 
em.setPps(file.readUTF()); 
em.setName(file.readUTF()); 
em.setSurname(file.readUTF()); 
em.setGender(file.readBoolean()); 
em.setDep(file.readUTF()); 
em.setSalary(file.readInt()); 
em.setFulltime(file.readBoolean()); 

あなたが二回setPpsを呼んでいます。また

、あなたは私たちは、読み取り/書き込み操作で簡単に見てみた場合

から読み込まれたファイルが書き込まなっているJFileChooserとを/使用して選択した内容との間には照合がありません、我々はdoubl読み取りを見ることができます操作

+----------------------------------+-------------------------------------+ 
| Write       | Read        | 
+----------------------------------+-------------------------------------+ 
| file.writeUTF(em.getPps());  | em.setPps(file.readUTF());   | 
+----------------------------------+-------------------------------------+ 
| file.writeUTF(em.getName());  | em.setPps(file.readUTF());   | 
+----------------------------------+-------------------------------------+ 
| file.writeUTF(em.getSurname()); | em.setName(file.readUTF());   | 
+----------------------------------+-------------------------------------+ 
| file.writeUTF(em.getGender()); | em.setSurname(file.readUTF());  | 
+----------------------------------+-------------------------------------+ 
| file.writeUTF(em.getDep());  | em.setGender(file.readBoolean()); | 
+----------------------------------+-------------------------------------+ 
| file.writeInt(em.getSalary()); | em.setDep(file.readUTF());   | 
+----------------------------------+-------------------------------------+ 
| file.writeUTF(em.getFullTime()); | em.setSalary(file.readInt());  | 
+----------------------------------+-------------------------------------+ 
|         | em.setFulltime(file.readBoolean()); | 
+----------------------------------+-------------------------------------+ 

は何を書いていると何を例えば

を読んでいる、あなたはfile.writeUTF(em.getGender());を使用して性別を書きますが、あなたはを使用してそれを読む間の格差もありますそれは私のJFileChooserを経由して、適切にファイルに保存する場合は

あなたは、おそらくそれは、それらの間の照合があることを意味し、file.writeBoolean(em.getGender());

を使用すべきですか?

あなたは(私はあなたがファイルが保存するディレクトリを推定)保持しているが、それはこれだけにコンテキストを持つfileToSaveと呼ばれるローカル変数を作成するのは、あなたのsaveFileDialog方法

private void saveFileDialog(){ 

    fileChooser = new JFileChooser(System.getProperty("employees.dat")); 
    disableTextField(fileChooser.getComponents()); 

    fileChooser.setSelectedFile(new File("employees.dat")); 
    fileChooser.setDialogTitle("File to save"); 

    int userSelection = fileChooser.showSaveDialog(this); 
    if (userSelection == JFileChooser.APPROVE_OPTION) { 
     File fileToSave = fileChooser.getSelectedFile(); 
     save(); 
     System.out.println("Save as file: " + fileToSave.getAbsolutePath()); 
    } 
} 

を見てみましょう方法、誰も使用することはできません

したがって、あなたのメソッドを読む必要があります...

private void saveFileDialog(){ 
    save(); 
} 

、それは基本的に私はまた、あなたがしなければならない、おそらく

+0

ありがとう、ステップを2回呼び出しても、同じ問題が残っています。私のJFileChooserを介してファイルに適切に保存すると、それらの間に照合があることを意味しますか? – Alex

+0

しかし、「保存」メソッドはファイルをどこに保存するかを知っていますか?その情報をメソッドに渡すことは決してありません – MadProgrammer

+0

私は自分のファイルを保存したい場所に移動し、このアプリケーション用に自分のフォルダに手動で保存します。そしてそこのファイルを開き、すべてのデータが保存されます。 – Alex

関連する問題