からデータを取得できませんし、すべてが完璧に動作します:は、ファイルを保存するために<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)
の代わりに独自のエラーメッセージを印刷し、あなたの人生がずっと楽になるだろうJAXBのようなものを使用して検討したいと同じ結果
を達成するであろう'e1.printStackTrace()'を使って実際に問題が何かを確認してください。 – Titus
ありがとうございます。今私の投稿を更新します。 – Alex
私は混乱しています、あなたは 'saveFileDialog'でどのファイルを選択したのか' save'はどのように知っていますか?現在の作業ディレクトリにファイルを保存するだけです – MadProgrammer