因为File
对象构造函数需要aString
来表示路径,考虑到其他原因,我选择制作一个临时文件,当用户要保存时,将临时文件的内容带到最终文件中,并要求用户给出路径那时。
我有一些我会解释的代码,但由于很多原因,我认为这不是做我想做的事情的最佳解决方案之一。
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;
}
并且该方法在保存函数中以这种方式调用:
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
出现 a 并保存路径。然后初始化最终文件,将临时数据传递给最终文件,仅此而已。
如果用户在“我不确定我的代码是否有效或者是否有任何方法可以使它变得更好”期间未选择有效路径或在某处取消,则处理 NPE 很重要。
PS请不要费心告诉异常尚未处理,我知道这一点,但我想知道基本想法是否能有效地做应该做的事情。