0

Javaで名前を付けて保存機能をエミュレートしようとしています。以前に保存したコードと同じように、ファイル名を選択したい

myData.dat

これは、私のMain.Classのメニューで使用されます。

else if (option.compareTo("8") == 0){
    manualLib.save();}


  public void save(){
    String content = "";
    for (int i = 0; i < library.size(); i++){
        for (int bar = 0; bar < library.get(i).size(); bar++){
            content += library.get(i).get(bar).getSerial() + "\n";
            content += library.get(i).get(bar).getTitle() + "\n";
            content += library.get(i).get(bar).getAuthor() + "\n";
            content += library.get(i).get(bar).onLoan() + "\n";
            content += library.get(i).get(bar).getBorrower() + "\n";
        }
    }

    Writer output;
    try {
        output = new BufferedWriter(new FileWriter("myData.dat"));
        try {
              output.write(content);
            }
        finally {
              output.close();
              System.out.println("Successfully saved to myData.dat file.");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

これを達成するための良い方法は何ですか?

4

2 に答える 2

1

JFileChooserを使用できます。これにより、ユーザーがファイル (またはファイル名) を選択できるようにする「簡単な」UI が提供されます。myData.dat次に、 yourを によって返された値に置き換えますchooser.getSelectedFile().getName()

私はこれをコンパイルしていませんが、コードは最終的に次のようになります。

public void save(){
    String content = "";
    for (int i = 0; i < library.size(); i++){
        for (int bar = 0; bar < library.get(i).size(); bar++){
            content += library.get(i).get(bar).getSerial() + "\n";
            content += library.get(i).get(bar).getTitle() + "\n";
            content += library.get(i).get(bar).getAuthor() + "\n";
            content += library.get(i).get(bar).onLoan() + "\n";
            content += library.get(i).get(bar).getBorrower() + "\n";
        }
    }

    Writer output;

    JFileChooser chooser = new JFileChooser();
    DatFilter filter = new DatFilter();
    filter.addExtension("dat");
    filter.setDescription(".dat files");
    chooser.setFileFilter(filter);
    int returnVal = chooser.showOpenDialog(null);
    String fileName = new String();
    if(returnVal == JFileChooser.APPROVE_OPTION) {
    fileName=chooser.getSelectedFile().getName();
    }

    try {
        output = new BufferedWriter(new FileWriter(fileName));
        try {
              output.write(content);
            }
        finally {
              output.close();
              System.out.println("Successfully saved to "+fileName+" file.");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

次に、クラスも作成します

public class DatFilter extends FileFilter {

    //should accept only dirs and .dat files
    public boolean accept(File f) {
        if (f.isDirectory()) {
            return true;
        }

    String extension = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 &&  i < s.length() - 1) {
            extension = s.substring(i+1).toLowerCase();
        }

        if (extension != null) {
            if (extension.equals("dat"){
                    return true;
            } else {
                return false;
            }
        }

        return false;
    }

    //The description of this filter
    public String getDescription() {
        return ".dat Files";
    }
}
于 2013-01-18T17:30:33.267 に答える
0
  • JFileChooser または任意の UI を使用して、作成するターゲット ファイルへのフル パスを取得します。
  • メソッドにパラメーターを追加してsaveこのパスを取得し、代わりにそれを使用しますmyData.dat
  • Main.class のフィールドにファイル パスを格納する
  • Main.class に格納されているパスを使用しsaveてパラメーターを呼び出すパラメーターなしを追加します。save
于 2013-01-18T17:37:49.320 に答える