使用Profile文件记录JFileChooser(或者File控件)最新打开的文件路径

一、描述

我们使用JFileChooser或者File控件打开Windows系统目录下的文件之后,如何保存我们最近打开的文件路径,使得每次打开文件就能打开最近一次打开的文件目录,而不是每次默认打开C:\Users\Administrator\Documents目录。我们需要使用Profile属性文件来记录最近打开的文件路径,在File控件打开文件前先读取配置文件中的最近文件目录,在打开文件后将路径保存到Profile文件中,在操作完毕点击确定按钮后写入Profile配置文件。

二、源代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

public class CountUserServer{
     public static File chooseFile;
     private static String  latestPath ;
     private static Profile profile;
     private static JFileChooser fileChooser;

    public CountUserServer (){
         profile = new Profile();//每次运行程序时创建配置文件Profile对象
         //读取配置文件里的参数Profile并赋值给latestPath,如果配置文件中没有该记录则设置一个默认路径
         latestPath = (profile.read()?profile.latestPath:"D:/KKServer/MainServer/");
          try{

               if(!new File(latestPath).exists()){
                latestPath = "D:/KKServer/MainServer/";   //设置默认的最新路径
               }

                fileChooser = new JFileChooser(latestPath);
				//过滤.log类型的文件
				FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files", "log");
				fileChooser.setFileFilter(filter);
				int returnValue = fileChooser.showOpenDialog(null);
				if (returnValue == fileChooser.APPROVE_OPTION) {
				  chooseFile = fileChooser.getSelectedFile();
				  latestPath = chooseFile.getParent();//每次退出文件选择器后更新目录Properties
				  profile.write(latestPath);
				  new OnlineCountDialog();
				}
			 }catch(FileNotFoundException e){
            e.printStackTrace();

        }
     }

    public static void main(String[] args){

       new CountUserServer();

    }
}

 class Profile{
       //设置默认的最新路径
       String latestPath = "D:/KKServer/MainServer/";
       //在当前工程目录下创建setLatestPath.properties配置文件
       File file = new File("./setLatestPath.properties");
        public Profile(){}
        boolean create(){
         boolean flag = true;
         if(file!=null){
            File directory = file.getParentFile();  //获得文件的父目录
            if(!directory.exists()){    //父目录不存在时
             flag = directory.mkdirs(); //创建父目录
            }else{                      //存在目录
             if(!file.exists()){//配置文件不存在时
              try {
               flag = file.createNewFile();//创建配置文件
              } catch (IOException e) {
               flag = false;
              }
             }
            }
         }
         return flag;
        }
        /**
         * 读取属性文件中最新打开文件的目录
         * @return
         */
       public boolean read(){
         Properties properties; //声明属性集
         FileInputStream inputStream = null; //声明文件输入流
         boolean b = true;         //声明boolean返回值
         if(!file.exists()){    //配置文件不存在时
            b = create();         //调用create()方法创建一个配置文件
            if(b) {               //配置文件创建成功后
              b = write(latestPath);//调用write()将latestPath写入配置文件
            }else{
               //创建失败即不存在配置文件时弹出对话框提示错误
               JOptionPane.showConfirmDialog(null, "对不起,不存在配置文件!", "错误",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE);
            }
         }else{
            try {
                inputStream = new FileInputStream(file);
                properties = new Properties();
                properties.load(inputStream);//读取属性
                latestPath = properties.getProperty("latestPath");//读取配置参数latestPath的值
                inputStream.close();
            }catch (IOException ex) {
                ex.printStackTrace();
                b =  false;
            }
         }
         return b;
        }
       /**
        * 将最新打开文件的目录保存到属性文件中
        * @param latestPath
        * @return
        */
     public boolean write(String latestPath){
         this.latestPath = latestPath;
         Properties properties = null;
         FileOutputStream outputStream = null;
         boolean flag = true;
         try {
          outputStream = new FileOutputStream(file);
          properties = new Properties();
          properties.setProperty("latestPath",latestPath);
          properties.store(outputStream,null); //将属性写入
          outputStream.flush();
          outputStream.close();
         }catch (IOException ioe) {
          flag = false;
          ioe.printStackTrace();
         }
         return flag;
    }
}

三、总结

1、每次打开File控件或者JFileChooser时先读取Profile文件中的路径信息,如果存在就读取,如果不存在就设置一个默认的路径;

2、选择某个文件后就将新的文件路径写入Profile文件,以便下次读取。

时间: 2024-10-25 11:22:09

使用Profile文件记录JFileChooser(或者File控件)最新打开的文件路径的相关文章

File杂谈——初识file控件

首先我说明下,这里介绍的file控件指的是网页中的FileUpload对象,也就是我们常见的<input type="file">.如果你不是想寻找这方面的东西,就可以绕道了. 功能 当我们需要在网页中实现文件上传功能的时候,file控件就可以大显身手了.HTML文档中每添加一个<input type="file">,实际就是创建了一个FileUpload实例对象.用户可以通过点击file控件选择本地文件,当我们提交包含该file控件的表单时

file控件选择同一文件不触发change事件和img控件不改变src的情况下图片不刷新问题解决

最近跑来前端掺和了.. file控件的问题用 inputFile.value = ''; img控件的问题,在图片后面添加一串无意义的参数即可,例如: img.src = 'file:///' + 本地图片路径+ '?t=' + Math.random();

File控件选择图片的时候在Html5下马上预览

页面HTML <div> <img src="@pic.Path" id="img" style="width:200px;height:200px;" /> <form id="form_photo" method="post" action="/N/SavePhoto?id=1"> <input style=" display:no

如何清空文件上传控件里的选定文件(路径)

我又来扯鸡毛蒜皮了.有名言曰人生短得不够扯鸡毛蒜皮,但我的工作就是由无数的鸡毛蒜皮组成,如之奈何? 今天的鸡毛和蒜皮是:如何清空文件上传控件里的选定文件(路径)? 场景是酱紫的: 有一个上传控件和一个按钮,其中上传控件隐藏.点击按钮,触发上传控件点击事件,于是弹出文件选择对话框:选好文件后,于是触发了上传控件的onchange事件.在这个事件里,将文件上传. 有点装逼,就是隐藏了上传控件.这可能是出于界面简约的考虑.问题是,同一个文件不能连续上传2次,因为路径不变,没有触发onchange事件.

File控件杂谈

我们通常使用<input type='file'/>来实现网页中文件上传功能,用户可以通过点击file控件选择本地文件,当我们提交包含该控件的表单时,浏览器会向服务器发送用户选中的文件. 看上面的描述,file控件貌似挺强大的,事实上也是这样的.但实际开发中我们也可以挑出file控件的诸多问题: 1.我们可以通过value属性获取用户选择的文件的名称,但出于安全因素,该属性只读,所以也就无法指定默认值. 2.最让我们诟病的是,file控件在不同浏览器上长相迥异.这让我们开发者情何以堪?而且“选

file控件change事件触发问题

最近,项目中需要用到一个图片上传的功能,我用的file控件来选取图片文件,然后利用js读取文件来预览图片,最后再根据用户的操作来决定是否上传文件. 其中碰到了一个奇怪的问题:在选取完第一张图片,并上传后,再选取第二张图片的时候,并没有触发file的change事件. 问了下度娘,各种解决方案很多: 1)有的说要使用live来注册事件,如可以写成$('#fileID').live('change,function(){//do something}); 2)有的说要用replaceWith把原来的

input的file 控件及美化

在一些网站进行上传时,当单击了“浏览”按钮之后会弹出[选择文件]的对话框.想要实现这一功能,用input的file控件来实现就好啦~ <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style></style> </head> <

怎样清空文件上传控件里的选定文件(路径)

我又来扯鸡毛蒜皮了. 有名言曰人生短得不够扯鸡毛蒜皮,但我的工作就是由无数的鸡毛蒜皮组成,如之奈何? 今天的鸡毛和蒜皮是:怎样清空文件上传控件里的选定文件(路径)? 场景是酱紫的: 有一个上传控件和一个button.当中上传控件隐藏.点击button,触发上传控件点击事件,于是弹出文件选择对话框:选好文件后.于是触发了上传控件的onchange事件.在这个事件里.将文件上传. 有点装逼,就是隐藏了上传控件. 这可能是出于界面简约的考虑.问题是.同一个文件不能连续上传2次.由于路径不变,没有触发o

混合开发 webview 中file 控件 点击后无反应解决方法

最近在做个项目 ,需要 使用 file 控件上传 图片到服务器 ,在手机浏览器中 可以正常选择照片,但是放到 android 应用中的webview中,file 控件点击后就没有反应. 百度了一番后,找到以下解决方案 开头定义 private ValueCallback<Uri> mUploadMessage; final static int FILE_SELECTED = 4; 然后设置 mWebView.setWebChromeClient(new WebChromeClient() {