保存文件java

时间:2012-11-30 15:31:07

标签: java performance file save jfilechooser

因为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。请不要再说这些例外情况尚未处理,我知道这一点,但我想知道这个基本想法是否会有效地做到应该做的事情。

0 个答案:

没有答案