JR 精品文章 - 在Java实现Dos中的文件操作命令功能
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java语言深入 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
在Java实现Dos中的文件操作命令功能
nepalon 原创   更新:2003-11-10 16:24:50  版本: 1.0   

这几天要对项目进行修改,主要是添加对文件操作的功能。如,删除一条信息后要同时删除它所带的附件。于是在空闲时间,决定把功能扩大一下,做一套用Java实现的Dos命令的简单版本。Java的IO中,要对文件进行操作用的是class File(InputStream之类的我把它们视为是对文件内容进行操作的class)。所以,我们要用的的操作都是通过File这个类来实现的。下面,我们将实现所要的功能。
一.    File Class
1.    class File对象描述了所指定路径下的文件和目录的信息。通过File对象,可以查看某个路径下的文件和目录信息,并可操作路径下的文件和目录。
2.    class File的应用
2.1    查看(查询)某个路径下的文件信息。
2.1.1    class File的构造函数
class File有两类构造函数,一类带有一个参数,用于产生一个描述参数所所指向的路径下的文件系统的对象;另一类带有两数,第一个参数表示路径,第二个参数表示子目录,用来产生描述第一个参数所指向的路径下的某个子目录的文件信息,子目录名称由第二个参数指定。如:
File path = new File(“c:\\”);产生一个描述c:\下的文件信息的对象
File path = new File(“c:\\”, “test”);产生一个描述c:\的test子目录的文件信息的对象。
2.1.2    list()和list(FilenameFilter filter)函数
1)    list()函数以String数组的形式返回一个File对象所描述的文件信息。返回的是路径下的所有文件和目录的文件名和目录名。
2)    list(FilenameFilter filter)函数则提供了查询功能,通过它可能查询出满足特定条件的文件名和目录名。
2.1.3    用FinenameFilter接口进行文件或目录的查询
2.1.3.1.    这个接口只包含一个函数:boolean accept(File dir, String name),第二个参数代表一个文件或目录的名称,第一个参数代表文件或目录所在的目录的名称。当返回true,表示文件满足查询条件,要被放入结果中;否则,表示文件不满足要求。
2.1.3.2.    工作原理
当调用某个File对象的list(FilenameFilter filter)函数时, 会对File对象中的每一个文件或目录调用参数filter中的accept()方法。在对一个文件或目录调用accept()函数时把它的名称以及一个描述它所在的目录的File对象作为参数传给accept()函数。
2.1.4    一个简单的实例
  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. class DirList{
  4.     public void printFile(String dir, String filter){
  5.         File path = new File(dir);
  6.         String[] fileList;
  7.         if(filter.length()==0){
  8.             System.out.println("\nAll file:");
  9.             fileList = path.list(); //取得所有文件信息
  10.         }
  11.         else{
  12.             System.out.println("\nAll file including " + filter);
  13.             //取得满足查询条件的文件信息
  14.             fileList = path.list(new DirFilter(filter));
  15.         }
  16.         for(int i=0; i<fileList.length; i++)
  17.             System.out.println(fileList[i]);
  18.     }
  19.     public void printFile(String dir){
  20.         printFile(dir, "");
  21.     }
  22. }
  23. class DirFilter implements FilenameFilter{
  24.     String afn; //存放查询条件
  25.     DirFilter(String afn) { this.afn = afn; }
  26.     //满足查询条件,返回true
  27.     public boolean accept(File dir, String name){
  28.         return name.indexOf(afn)!=-1;
  29.     }
  30. }
  31. public class TestIO{
  32.     public static void main(String[] args){
  33.         DirList dirList = new DirList();
  34.         //显示F:\test下的文件信息
  35.         dirList.printFile("F:\\test");
  36.         //显示F:\test下名称包含“.rar”文件信息
  37.         dirList.printFile("F:\\test"".rar");
  38.         //显示F:\test下名称包含“r”文件信息
  39. dirList.printFile("F:\\test""r");
  40.     }
  41. }

这个只是一个简单的例子,只要完善accept()函数,你也可以做出一个Java版的dir命令来。
2.2    当然,我们还能通过File来文件或目录进行创建、删除和改名的操作。
  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. import java.util.Date;
  4. import java.text.SimpleDateFormat;
  5. class DirFilter implements FilenameFilter{
  6.     String afn;
  7.     DirFilter(String afn) { this.afn = afn; }
  8.     public boolean accept(File dir, String name){
  9.         return name.indexOf(afn)!=-1;
  10.     }
  11. }
  12. class OptFile{
  13.     public static String getAbsolutePath(File f){
  14.         return f.getAbsolutePath();
  15.     }
  16.     public static String getPath(File f){
  17.         return f.getParent();
  18.     }
  19.     public static String getName(File f){
  20.         return f.getName();
  21.     }
  22.     public static long getLength(File f){
  23.         return f.length();
  24.     }
  25.     public static String getParent(File f){
  26.         return f.getParent();
  27.     }
  28.     public static String getLastModified(File f, String format){
  29.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  30.         if(format.equals("ymdh"))
  31.             sdf = new SimpleDateFormat("yyyy-MM-dd hh");
  32.         else if(format.equals("ymdhm"))
  33.             sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
  34.         return sdf.format((new Date(f.lastModified())));
  35.     }
  36.     public static String getLastModified(File f){
  37.         return getLastModified(f, "ymd");
  38.     }
  39.     public static boolean canRead(File f){
  40.         return f.canRead();
  41.     }
  42.     public static boolean canWrite(File f){
  43.         return f.canWrite();
  44.     }
  45.     public static boolean isFile(File f){
  46.         return f.isFile();
  47.     }
  48.     public static boolean isDir(File f){
  49.         return f.isDirectory();
  50.     }
  51.     public static boolean rename(File oldName, File newName){
  52.         return oldName.renameTo(newName);
  53.     }
  54.     public static boolean delete(File f){
  55.         return f.delete();
  56.     }
  57.     public static boolean mkdir(File f){
  58.         return f.mkdirs();
  59.     }
  60.     /**
  61.      * 从指定路径中查询文件
  62.      */
  63.     public static File[] findFile(String filePath, String fileName){
  64.         File f = new File(filePath);
  65.         File[] result = f.listFiles(new DirFilter(fileName));
  66.         return result;
  67.     }
  68.     public static void printFileAtt(File f){       
  69.         System.out.println(
  70.             " Absolute path: " + getAbsolutePath(f) +
  71.             "\n Can read: " + canRead(f) +
  72.             "\n Can write: " + canWrite(f) + 
  73.             "\n path: " + getPath(f) +
  74.             "\n name: " + getName(f) +
  75.             "\n parent: " + getParent(f) +
  76.             "\n length: " + getLength(f) +
  77.             "\n lastModified: " + getLastModified(f));
  78.         if(isFile(f))
  79.             System.out.println(" it's a file");
  80.         else if(isDir(f))
  81.             System.out.println(" it's a directory");
  82.     }
  83. }
  84. public class TestIO{
  85.     public static void main(String[] args){
  86.         File f1 = new File("F:\\nepalon\\thinkinginjava\\test");
  87.         File f2 = new File("F:\\nepalon\\thinkinginjava\\test\\aa ");
  88.         OptFile.printFileAtt(f1);
  89.         OptFile.printFileAtt(f2);
  90.         //当对文件或目录进行改名,且更新到一个不同的下时,
  91.         //会先把文件或整个目录剪切到新目录下,再重新命名
  92.         File nf2 = new File("F:\\nepalon\\thinkinginjava\\使用log4j.files");
  93.         if(OptFile.rename(f2, nf2)){
  94.             System.out.println("after rename f2:");
  95.             OptFile.printFileAtt(nf2);
  96.         }
  97.         else
  98.             System.out.println("rename nf2 failly");
  99.       //进行删除操作时,只能删除文件;如果删除的是目录,会返回false
  100.         File df = new File("F:\\nepalon\\thinkinginjava\\test\\1001.doc");
  101.         if(OptFile.delete(df))
  102.             System.out.println("Delete df successfully");
  103.         else
  104.             System.out.println("Delete df failly");
  105.         System.out.println("Find file with name \"1001\"");
  106.         OptFile.findFile("F:\\nepalon\\thinkinginjava\\test""1001");
  107.         File mf = new File("F:\\nepalon\\thinkinginjava\\test\\1001");
  108.         if(OptFile.mkdir(mf))
  109.             System.out.println("create directory mf successfully");
  110.         else
  111.             System.out.println("create directory mf failly");
  112.     }
  113. }


版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     31       2
作者其它文章: 作者全部文章
评论人:Becky_hy 发表时间: Wed Nov 12 11:44:22 CST 2003
看了,不是很理解,能不能给出一个例子(写一个源程序),下载下来试一试,那样效果会更好些。可以么?
评论人:keerbritney 发表时间: Wed Nov 12 19:26:58 CST 2003
Java的IO系统是太麻烦了,初学的时候还真的一头雾水
评论人:hong_sea 发表时间: Thu Nov 13 08:50:02 CST 2003
相当不错。
评论人:heart5 发表时间: Fri Nov 14 17:43:10 CST 2003
真是好啊。我正在设计一个模拟的DOS系统,已经实现了dir、cd功能,对路径的处理使用了URI、URL的相关功能。
这下得好好从这里学些东西罗
游客: softsun 发表时间: Wed Jul 07 17:04:53 CST 2004
如果,指定的目录为空时,会有异常抛出。
比如:
//显示A:\下的文件信息        
dirList.printFile("A:\\");A为软驱,未放软盘
评论人:新手上路 发表时间: Fri Sep 24 12:04:02 CST 2004
老大,你可是帮了我的大忙了
感谢呀


这个文章共有 6 条评论
主题: Extra for J2EE -- Web 构件开发平台(附:产品白皮书) 上一篇文章
返回文章列表 返回〔Java语言深入〕
下一篇文章 主题: struts傻瓜式学习(一天篇)


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号