File
オブジェクト コンストラクターはパスを表すために を必要String
とし、他の理由を考慮して、一時ファイルを作成し、ユーザーが保存したい場合は、一時ファイルの内容を最終ファイルに取得し、ユーザーにパスを指定するように依頼することにしました。その時。
説明するコードがいくつかありますが、多くの理由から、これは私がやろうとしていることを実行するための最良の解決策の 1 つではないと思います。
public String FileSavePath() throws NullPointerException {
boolean acceptable = false;
String theFilepath = null;
do {
theFilepath = null;
File f = null;
JFileChooser FileChooser = new JFileChooser();
if (FileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
theFilepath = FileChooser.getSelectedFile().getAbsolutePath();
f = FileChooser.getSelectedFile();
//System.out.println(theFile);
if (f.exists()) {
int result = JOptionPane.showConfirmDialog(this, "The file exists, overwrite?",
"Existing file", JOptionPane.YES_NO_CANCEL_OPTION);
if (result == JOptionPane.YES_OPTION) {
acceptable = true;
}
}
} else {
acceptable = true;
}
} while (!acceptable);
saved=true;
return theFilepath;
}
そして、このメソッドは save 関数で次のように呼び出されます。
FileChannel sourceChannel=null;
FileChannel targetChannel=null;
try
{
try{
file=new File(FileSavePath());
}
catch(NullPointerException npe)
{
System.exit(0);
}
sourceChannel = new FileInputStream(temp).getChannel();
targetChannel = new FileOutputStream(file).getChannel();
targetChannel.transferFrom(sourceChannel, 0,
sourceChannel.size());
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
finally
{
try {
if (sourceChannel != null) {
sourceChannel.close();
}
if (targetChannel != null) {
targetChannel.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
基本的なメカニズムは次のとおりです。すべてのデータは一時ファイルに保存されます。ユーザーが保存する場合は、 がJFileChooser
表示され、パスを保存します。次に、最終ファイルが初期化され、一時データが最終ファイルに渡され、それだけです。ユーザーが有効なパスを選択しなかった場合、または途中でキャンセルした場合、NPE を処理することが重要です
。
PS 例外がまだ処理されていないことをわざわざ言わないでください。