因为File
对象构造函数需要String
来表示路径并考虑到其他原因,所以我选择创建一个临时文件,当用户想要保存时,采取临时内容到最终文件并要求用户在那时给出路径
我会解释一些代码,但由于种种原因,我认为这不是我想做的最好的解决方案之一。
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非常重要
我不确定的是,我的代码是否有效,或者是否有任何方法可以使其更好。
P.S。请不要再说这些例外情况尚未处理,我知道这一点,但我想知道这个基本想法是否会有效地做到应该做的事情。