默然说话

一个异想天开的人做着异想天开的梦

牟勇ID:mouyong
63859次访问,排名1578好友4人,关注者6
我快乐,我存在
mouyong的文章
原创 108 篇
翻译 4 篇
转载 30 篇
评论 12 篇
默然的公告
如果要联系我,希望能说明来意,谢谢.

点击这里给我发消息

Google

最近评论
peigen:又~~~~为什么是又呢???
dcopperfield:顶下
gaoyunpeng:无意中进入到这个博客,很快就被里面的内容所吸引,感觉很有意思,不知道为什么会有这样的感觉,或许只是一种直觉上的吸引吧,一直在看博客里的文章,觉得很不错,天天等更新,哈哈,终于看到新的文章啦~
我会一直关注的~
mouyong:谢谢你的鼓励,我会更加努力。
了祝愿你实现自己的理想,达成自己的目标
wsspy007:牟老师,我发现你是我见过最好的老师了,为学生考虑最多,一切为学生着想,不知道牟老师还记得我么,张伟(无名小辈肯定你是忘记了),第一期跟杨大宇他们在一个班的,补考两次都没有及格,我现在不在昆明了,在胜利油田,这里一切都很好,一个月的薪金能顶得上昆明3-5个月的薪水,但是我不喜欢这份工作,钱固然多,但是从学校出来步入社会以后才发现,我还是应该走软件开发这条路,现在每天我只睡4-6个小时,工作12……
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Java文件同步软件(源代码)收藏

    新一篇: 游戏编程中的人工智能(2-1) | 旧一篇: 默然周记20070530

     这个Java软件一共有两个类,下面是FileOperator类

     

    /**
     *<pre>
     *FileOperator
     *
    @author 牟勇
     *版本:0.0.1 Build 18
     *创建日期:2007.6.6 20:36:03
     *功能说明:完成文件的复制,删除等功能
     *功能1:完成文件的复制
     *功能2:完成文件的删除
     *
     *版本:0.0.2 Build 52
     *修改日期:2007.6.6 16:12:26
     *增加:写待同步文件根目录至指定文件中
     *增加:同步文件的方法       
     *</pre>
     
    */

    package com.speakmore.family.file;

    import java.io.*;

    public class FileOperator{
        
    static FileInputStream br;
        
    static FileOutputStream bw;
        
    static PrintWriter pw=null;
        
    /**
         *copyFile
         *复制源文件到目标文件
         *
    @param targetFile 复制的目标文件名
         *
    @param sourceFile 复制的源文件名
         *
    @return 复制文件是否成功,true表示成功,false表示不成功
         *如果源文件名是一个目录且目标文件名不存在,则创建它
         *如果源文件名是一个目录且目标文件名存在,则忽略
         *如果源文件名是一个文件且目标文件名不存在,则创建它
         *如果源文件名是一个文件且比目标文件新,则覆盖它
         *如果源文件名是一个文件且比目标文件旧,则忽略
         *
         
    */

        
    public static boolean copyFile(File targetFile,File sourceFile){
            
            
    //如果源文件名是一个目录且目标文件名不存在,则创建它
            if(sourceFile.isDirectory()&&!targetFile.exists()){
                System.out.println(
    "目录且不存在:"+targetFile.toString());
                targetFile.mkdirs();
                
    return true;
            }

            
            
    //如果源文件名是一个目录且目标文件名存在,则忽略
            if(sourceFile.isDirectory()&&targetFile.exists()){
                System.out.println(
    "目录且存在:"+targetFile.toString());
                
    return true;
            }

            
            
    //如果源文件名是一个文件且目标文件名不存在,则创建它
            if(sourceFile.isFile()&&!targetFile.exists()){
                System.out.println(
    "文件且文件不存在:"+targetFile.toString());
                
    return writer(targetFile,sourceFile);
            }

             
    //如果源文件名是一个文件且比目标文件新,则覆盖它
             if(sourceFile.isFile()&&sourceFile.lastModified()>
                                                 targetFile.lastModified())
    {
                 System.out.println(
    "文件且文件存在且要修改:"+targetFile.toString());
                 
    return writer(targetFile,sourceFile);
                
             }

        
             
    //如果源文件名是一个文件且比目标文件旧,则忽略
             if(sourceFile.isFile()&&sourceFile.lastModified()<=
                                                 targetFile.lastModified())
    {
                 System.out.println(
    "文件且文件存在:"+targetFile.toString());
                 
    return true;
                
             }

            
    //如果前五种条件都不符合,则表示无法复制文件,返回false
            return false;
        }

        
        
    /**
         *copyFile
         *复制源文件到目标文件
         *
    @param targetFilePath 复制的目标文件路径
         *
    @param sourceFilePath 复制的源文件路径
         *
    @return 复制文件是否成功,true表示成功,false表示不成功
         *如果源文件名是一个目录且目标文件名不存在,则创建它
         *如果源文件名是一个目录且目标文件名存在,则忽略
         *如果源文件名是一个文件且目标文件名不存在,则创建它
         *如果源文件名是一个文件且比目标文件新,则覆盖它
         *如果源文件名是一个文件且比目标文件旧,则忽略
         
    */

        
    public static boolean copyFile(String targetFilePath,String sourceFilePath){
            
    return copyFile(new File(targetFilePath),new File(sourceFilePath));
        }

        
        
    /**
         *deleteFile
         *删除目标文件
         *
    @param targetFile 将被删除的文件
         *
    @return true表示删除成功,false表示不成功
         
    */

        
    public static boolean deleteFile(File targetFile){
            
    return targetFile.delete();
        }

        
        
    /**
         *deleteFile
         *删除目标文件
         *
    @param targetFilePath 将被删除的文件路径
         *
    @return true表示删除成功,false表示不成功
         
    */

        
    public static boolean deleteFile(String targetFilePath){
            
    return deleteFile(new File(targetFilePath));
        }

        
        
        
    //使用io对文件进行读写
        private static boolean writer(File targetFile,File sourceFile){
            String tempstr
    ="";
                
    try{
                    br
    =new FileInputStream(sourceFile);
                    bw
    =new FileOutputStream(targetFile);
                    
    byte[] fileContent=new byte[1024];
                    
    int readed=0;
                    
    int readSum=0;
                    
                    
    while((readed=br.read(fileContent))!=-1){
                        readSum
    +=readed;
                        bw.write(fileContent);
                    }

                                    
                    bw.close();
                    br.close();
                    
                    
    return true;
                }
    catch(Exception e){
                    e.printStackTrace();
                    
    return false;
                }

        }

        
    /**
         *writeFileIndex
         *将需要搜索的整个文件目录树写入指定的文件中
         *
    @param filePath 需要搜索的文件根目录
         *
    @param filename 指定的写入文件名
         *
    @return 无
         
    */

        
    public static boolean writeFileIndex(String filePath,String filename){
            
    boolean flag=false;
            
    try{
                
    //创建索引文件
                pw=new PrintWriter(new BufferedWriter(
                                        
    new FileWriter(filename)));
            }
    catch(IOException e){
                e.printStackTrace();
            }

            
            String[] temp
    =new File(filePath).list();
            
                pw.println(filePath);
                
    for(int i=0;i<temp.length;i++){                
                    
    if(new File(filePath+File.separator+temp[i]).isFile()){
                        pw.println(filePath
    +File.separator+temp[i]);
                        flag
    =true;
                    }

                    
    else{
                        flag
    =writeFileIndex(filePath+File.separator+temp[i],filename);
                    }

                }

            
            
            pw.flush();
            
    return flag;
        }

        
        
    /**
         *synFile
         *同步文件
         *
    @param sourcePath 源文件根目录
         *
    @param targetPath 目标文件根目录
         *
    @param filename 源文件目录树
         *循环读取源文件,然后写入目标文件对应位置
         
    */

        
    public static boolean synFile(String targetPath,String sourcePath,String filename){
            
    boolean flag=false;
            
    try{
                BufferedReader br
    =new BufferedReader(new FileReader(filename));
                String file;
            
                
    while((file=br.readLine())!=null){
                    
    //读取源文件索引列表        
                    File sourceFile=new File(file);
                    System.out.println(
    "源:"+file);
                    file
    =file.replace(sourcePath,targetPath);//换转为目标文件名
                    System.out.println("目标:"+file);
                    File targetFile
    =new File(file);//得到目标文件
                    
                    flag
    =copyFile(targetFile,sourceFile);
                }

                br.close();
            }
    catch(Exception e){
                e.printStackTrace();
                flag
    =false;
            }

            
            
    return flag;
        }

    }

    下一个类是本软件的主类:FileSyn

     

    /**<pre>
     *FileSyn
     *
    @author 牟勇
     *实现文件同步更新
     *版本:0.0.1
     *创建日期:2007.1.26 15:16:26
     *实现:
     *功能综述:实现从源文件夹到目标文件夹的同步更新
     *功能1:根据文件的修改日期进行更新,如果源文件的修改日期大于目标文件的日期则进行替换
     *功能2:如果源文件存在而目标文件不存在则在目标文件夹对应位置创建新文件
     *功能3:如果源文件不存在而目标文件存在则删除目标文件(暂不提供此功能)
     *
     *@@@@@@@@@@@@@@@@@@@@@@@@
     *包含文件:FileSyn.java
     *功能说明:文件同步更新项目主文件,绝大部分功能均在些实现
     *
     *新增文件:FileOperator.java
     *增添日期:2007.6.5 20:36:03
     *功能说明:完成文件的复制,删除,创建等功能
     *@@@@@@@@@@@@@@@@@@@@@@@@
     *
     **版本:0.0.2 Build 103
     *修改日期:2007.1.30 11:04:59
     *
     *增加:将源文件夹中的文件读出并写入filenamelist.txt中
     *修改:程序初始化显示位置
     *增加:源文件夹和打开文件夹的浏览对话框选择
     *增加:错误消息和成功消息
     *
     **版本:0.0.3 Build 55
     *修改日期:2007.6.5 8:23:59
     *
     *修改:调整了读源文件列表,解决了递归不正确的Bug
     *修改:调整了写目标文件,解决了无法写入的Bug
     *修改:解决了一个关于不同系统之间文件分隔符的问题使跨平台使用成为可能(理论上,未测试)
     *Bug:写目标文件会被写成文件夹
     *Bug:在选择文件夹时,点击文件夹并不能选中文件夹,只能在点击文件时才能选中文件所在的文件夹
     *</pre>
     
    */

    package com.speakmore.family.file;

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.io.*;
    import java.util.*;
    public class FileSyn extends JFrame{
        
    private JTextField txtTarget;//目标文件夹
        private JTextField txtSource;//源文件夹
        private JLabel lblTarget;
        
    private JLabel lblSource;
        
    private JButton btnTarget;//选择源文件夹的按钮
        private JButton btnSource;//选择目标文件夹的按钮
        private JButton btnOk;//开始按钮
        private JButton btnCancel;//取消按钮    
        
        
        
    public FileSyn(){
            
    this.getContentPane().setLayout(new GridLayout(3,1));
            JPanel p1
    =new JPanel(new FlowLayout(FlowLayout.LEFT));//左对齐
            lblSource=new JLabel("源文件夹");
            txtSource
    =new JTextField(35);
            btnSource
    =new JButton("浏览...");
            
            p1.add(lblSource);
            p1.add(txtSource);
            p1.add(btnSource);
            
            JPanel p2
    =new JPanel(new FlowLayout(FlowLayout.LEFT));
            lblTarget
    =new JLabel("目标文件夹");
            txtTarget
    =new JTextField(35);
            btnTarget
    =new JButton("浏览...");
            
            p2.add(lblTarget);
            p2.add(txtTarget);
            p2.add(btnTarget);
            
            JPanel p3
    =new JPanel(new FlowLayout(FlowLayout.RIGHT,20,0));
            btnOk
    =new JButton("确定");
            btnCancel
    =new JButton("取消");
            p3.add(btnOk);
            p3.add(btnCancel);
            
            
    this.add(p1);
            
    this.add(p2);
            
    this.add(p3);
            
            
    this.setDefaultLookAndFeelDecorated(true);
            
    this.setTitle("默然同步0.0.3");
            
    this.setResizable(false);
            
    this.setSize(550,150);
            
            
    //获得当前屏幕的尺寸
            Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
            
    //获得当前窗口的尺寸
            Dimension windowSize=this.getSize();
            
    //窗口居中
            this.setLocation((screenSize.width-windowSize.width)/2,
                                (screenSize.height
    -windowSize.height)/2);