1

因为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请不要费心告诉异常尚未处理,我知道这一点,但我想知道基本想法是否能有效地做应该做的事情。

4

0 回答 0