[转载]在Java实现Dos中的文件操作命令功能

在Java实现Dos中的文件操作命令功能
这几天要对项目进行修改,主要是添加对文件操作的功能。如,删除一条信息后要同时删除它所带的附件。于是在空闲时间,决定把功能扩大一下,做一套用 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(" All file:");
  9. fileList = path.list(); //取得所有文件信息
  10. }
  11. else{
  12. System.out.println(" All file including " + filter);
  13. //取得满足查询条件的文件信息
  14. fileList = path.list(new DirFilter(filter));
  15. }
  16. for(int i=0; ilength; 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: est下的文件信息
  35. dirList.printFile("F:\test");
  36. //显示F: est下名称包含“.rar”文件信息
  37. dirList.printFile("F:\test", ".rar");
  38. //显示F: est下名称包含“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. " Can read: " + canRead(f) +
  72. " Can write: " + canWrite(f) +
  73. " path: " + getPath(f) +
  74. " name: " + getName(f) +
  75. " parent: " + getParent(f) +
  76. " length: " + getLength(f) +
  77. " 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. }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130808/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130808/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值