File类

  java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类。它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑。对文件的真正操作,还得需要I/O流的实现。

1.目录列表


  如果我们想查看某个目录下有那些文件和目录,我们可以使用File中提供的list方式来查看,这很像linux下的ls命令。

  查看E:/html文件夹下所有的php文件,执行的时候输入的参数为正则表达式

 package com.dy.xidian;

 import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern; public class DirList {
static File path = new File("E:/html");
public static void main(String[] args) {
String[] list;
// 获取整个目录列表
if (args.length == 0)
list = path.list();
else
list = path.list(new DirFilter(args[0]));
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String string : list) {
System.out.println(string);
}
}
} class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
} public boolean accept(File dir, String name) {
// find匹配的是字符串的子序列,我们可以认为是不严格匹配
return pattern.matcher(name).find();
}
}

2.目录实用工具


  该工具有两个作用

  • 遍历所有目录及其子目录
  • 遍历目录下的文件以及其子目录下的文件
 package com.dy.xidian;

 import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern; import net.mindview.util.PPrint; public final class Diractory {
public static File[] local(File dir, final String regex) {
return dir.listFiles(new FilenameFilter() {
Pattern pattern = Pattern.compile(regex);
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(new File(name).getName()).matches();
}
});
} public static File[] local(String path, final String regex) {
return local(new File(path), regex);
} public static class TreeInfo implements Iterable<File> {
public List<File> files = new ArrayList<File>();
public List<File> dirs = new ArrayList<File>(); @Override
public Iterator<File> iterator() {
return files.iterator();
} void addAll(TreeInfo other) {
files.addAll(other.files);
dirs.addAll(other.dirs);
} public String toString() {
return "dirs: " + PPrint.pformat(dirs) + "\n\nfiles:"
+ PPrint.pformat(files);
}
} public static TreeInfo walk(String start, String regex) {
return recurseDirs(new File(start), regex);
} public static TreeInfo walk(File start, String regex) {
return recurseDirs(start, regex);
} public static TreeInfo walk(File start) {
return recurseDirs(start, ".*");
} public static TreeInfo walk(String start) {
return recurseDirs(new File(start), ".*");
} public static TreeInfo recurseDirs(File startDir, String regex) {
TreeInfo result = new TreeInfo();
for (File file : startDir.listFiles()) {
if (file.isDirectory()) {
result.dirs.add(file);
result.addAll(recurseDirs(file, regex)); //加入子目录信息
} else if (file.getName().matches(regex))
result.files.add(file);
}
return result;
} public static void main(String[] args) {
if (args.length == 0)
System.out.println(walk("."));
else
for (String arg : args) {
System.out.println(walk(arg));
}
}
}

  

3.目录的检查及创建


  File的更倾向于对目录、文件属性的操作,比如路径,存在性,大小,修改时间、读/写权限等,对文件的内容并不关心。

  

 package com.dy.xidian;

 import java.io.File;

 public class MakeDirectories {
private static void usage() {
System.err.println("Usage: MakeDirectories path1...\n"
+ "Creates each path\n"
+ "Usage: MakeDirectories -d path1...\n" + "Delete each path\n"
+ "Usage: MakeDirectories -r path1 path2\n"
+ "Renames from path1 to path2");
System.exit(1);
} private static void fileData(File f) {
System.out.println("Absolute path: " + f.getAbsolutePath()
+ "\n Can read: " + f.canRead() + "\n Can write: "
+ f.canWrite() + "\n getName: " + f.getName()
+ "\n getParent: " + f.getParent() + "\n getPath: "
+ f.getPath() + "\n length: " + f.length()
+ "\n lastModified: " + f.lastModified());
if (f.isFile())
System.out.println("It is a file");
else if (f.isDirectory())
System.out.println("It is a directory");
} public static void main(String args[]) {
if (args.length < 1)
usage();
if (args[0].equals("-r")) {
if (args.length != 3)
usage();
//文件重命名,若文件名冲突,则命名函数执行失败
File old = new File(args[1]), rname = new File(args[2]);
old.renameTo(rname);
fileData(old);
fileData(rname);
return;
}
int count = 0;
boolean del = false;
if (args[0].equals("-d")) {
count++;
del = true;
}
count--;
while (++count < args.length) {
File f = new File(args[count]);
if (f.exists()) {
System.out.println(f + " existd");
if (del) {
System.out.println("deleting..." + f);
f.delete();
}
} else if (!del) {
f.mkdirs();
System.out.println("create " + f);
}
fileData(f);
}
}
}

  该代码能够进行目录/文件的创建,删除,重命名操作.

java中的File类的更多相关文章

  1. 详谈JAVA中的file类与IO流

    File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...

  2. [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法

    前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用File.list()方法,该方法返回一个String[],但是如果文件达到几亿呢?这个时候我们就需要分批 ...

  3. Java中的File类,递归是什么?

    一.IO概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为 ...

  4. 用Java中的File类模拟实现对系统文件的增删改查效果

    码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...

  5. java中关于File类的细说

    File类是我们接触的比较多的类,当初学习是真是傻傻分不清啊.今天就总结一下file的一些比较不好区分的地方. 首先:当然就是构造方法 File f = new File("文件路径&quo ...

  6. java中关于File类的mkdirs()和FIle()构造方法在windows环境内网测试总结

    环境:环境是内网windows,传入路径的时候不带盘符,并且服务器的win10也不是超级管理员账户 关于File类的mkdirs()远程访问创建不了文件和路径的问题. 如果浏览器操作者是windows ...

  7. Java中使用File类删除文件夹和文件

    删除工具类: import java.io.File; public class DeleteAll{ public static void deleteAll(File file){ if(file ...

  8. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  9. JAVA中的File.separate(跨平台路径)

    转: JAVA中的File.separate(跨平台路径) 2016年03月27日 23:33:50 才不是本人 阅读数:1952   在Windows下的路径分隔符和Linux下的路径分隔符是不一样 ...

随机推荐

  1. 如何删除TFS的Team Project

    我们可以使用Visual Studio或Web新建一个TeamProject,但是删除时却没有一个合适的图形界面删除我们不想要的Team Project,所以此时就可以使用命令TFSDeletePro ...

  2. mysql force index() 强制索引的使用

    mysql force index() 强制索引的使用 之前跑了一个SQL,由于其中一个表的数据量比较大,而在条件中有破坏索引或使用了很多其他索引,就会使得sql跑的非常慢... 那我们怎么解决呢? ...

  3. Linux shell basic3 dd wc comm chmod ls

    Generating files of any size /dev/zerois a character special device, which infinitely returns the ze ...

  4. codeforces 719E E. Sasha and Array(线段树)

    题目链接: E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input sta ...

  5. Spring 一二事(5) - 依赖注入

    <!-- 依赖注入的装配过程 --> <bean id="person" class="com.lee.spring007.di.xml.setter. ...

  6. Java学习----Java概述

    一.常用DOS命令 d:      盘符切换 dir(directory)  列出当前目录下的文件以及文件夹 md (make directory)  创建目录 rd (remove director ...

  7. ref out 方法参数

    ref out 相似 ref和out两个关键字的作用大致相同,但是有一些微妙但是重要的区别. 两者的行为相似到连编译器都认为这两者不能被重载:public void SampleMethod(out ...

  8. java 8-8 接口的练习

    /* 老师和学生案例,加入抽烟的额外功能 分析: 老师和学生都具有共同的变量:名字,年龄 共同的方法:吃饭,睡觉 老师有额外的功能:抽烟(设定个接口),部分抽烟 有共同的变量和方法,设一个父类:per ...

  9. Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

    在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及 ...

  10. window7 右键菜单显示-》在此处打开命令窗口

    window7 右键菜单显示->在此处打开命令窗口: 注册表中: HKEY_CLASSES_ROOT\Directory\Background\shell\cmd下将[Extended]重命名或 ...