`
wdhdmx
  • 浏览: 304422 次
  • 性别: Icon_minigender_1
  • 来自: 山西
博客专栏
D4bbb5f7-9aa4-3e66-8194-f61b3f0241c2
天天编程
浏览量:21970
社区版块
存档分类
最新评论

File源码理解

阅读更多

1.构造函数

最基本的构造方法。

public File(String pathname) {
	if (pathname == null) {
	    throw new NullPointerException();
	}
        //将文件路径转为正常状态
        this.path = fs.normalize(pathname);
        //计算长度的路径字符串前缀,字符串必须是在正常的格式。
	this.prefixLength = fs.prefixLength(this.path);
}

里面用到下面三个变量

//本地文件系统
static private FileSystem fs = FileSystem.getFileSystem();
//文件路径
private String path;
//路径长度
private transient int prefixLength;

另外有两个私有的构造函数+两个公有构造函数,里面只有对path和prefixLength复制的操作。

//里面操作都一样,就是给两个变量赋值。
public File(File parent, String child)
public File(String parent, String child)

//前面的child为路径,后面的为文件
private File(String child, File parent)
//路径+路径长度
private File(String pathname, int prefixLength)

以网络路径赋值的构造方法,目前我还不会用这个。似乎是file://192.168.1.201/wan/a.txt 这样的链接。

 public File(URI uri) ;

2.createNewFile创建文件

 /*SecurityManager 为安全管理器是一个允许应用程序实现安全策略的类。,权限分为以下类别:文件、套接字、网络、安全性、运行时、属性、AWT、反射和可序列化*/

public boolean createNewFile() throws IOException {
	SecurityManager security = System.getSecurityManager();
        //检查路径是否有写的权限。
	if (security != null) security.checkWrite(path);
       //创建文件,内部方法是native的
	return fs.createFileExclusively(path);
}


//下面是SecurityManager类中的方法。内部方法很复杂,看不懂。只知道是检查文件能不能写的功能。
public void checkWrite(String file) {
	checkPermission(new FilePermission(file, 
	    SecurityConstants.FILE_WRITE_ACTION));
}

3.isDirectory和isFile

如果文件或者文件夹不存在的话这两个方法都返回false

//路径名表示的文件是否是一个目录
public boolean isDirectory() {
	SecurityManager security = System.getSecurityManager();
	if (security != null) {
           //看这个路径是否有读权限
	    security.checkRead(path);
	}
        //里面没内容,这里为什么只用一个&符号?
	return ((fs.getBooleanAttributes(this) & FileSystem.BA_DIRECTORY)
		!= 0);
}
//路径名表示的文件是否是一个标准文件。
public boolean isFile() {
	SecurityManager security = System.getSecurityManager();
	if (security != null) {
	    security.checkRead(path);
	}
	return ((fs.getBooleanAttributes(this) & FileSystem.BA_REGULAR) != 0);
    }

4.mkdir和mkdirs 创建目录

//只创建一个目录,如果多级目录都不存在就失败
public boolean mkdir() {
	SecurityManager security = System.getSecurityManager();
	if (security != null) {
	    security.checkWrite(path);
	}
        //如果文件已经存在或者创建权限不够,返回false
	return fs.createDirectory(this);
}
//创建多级目录
public boolean mkdirs() {
	if (exists()) {
	    return false;
	}
	if (mkdir()) {
 	    return true;
 	}
        File canonFile = null;
        try {
            canonFile = getCanonicalFile();
        } catch (IOException e) {
            return false;
        }

	File parent = canonFile.getParentFile();
	return (parent != null && (parent.mkdirs() || parent.exists()) &&
		canonFile.mkdir());
}

看到这里已经觉得没意思了,里面的内容都看不了,都是抽象和native。

5.list和listFiles

这两个方法都是先判断有没有读权限,然后一个native方法结束。下面是使用

public static void main(String args[]) throws IOException {
	File f = new File("src");
       //这里返回的是文件数组
	File[] l = f.listFiles();
	for (int i = 0; i < l.length; i++) {
		System.out.println(l[i].getName());
	}
        //这里返回的是文件名字符串数组
	String[] s = f.list();
	for (int i = 0; i < s.length; i++) {
		System.out.println(s[i]);
	}
}

这个是过滤器,实现FilenameFilter接口的accept方法。

一个例子,过滤文件名以.java结尾的文件  

String[] names =f.list(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				if(name.endsWith(".java")){
					return true;
				}
				return false;
			}
});
//过滤文件名以.java结尾的文件

 

public String[] list(FilenameFilter filter) {
	String names[] = list();
	if ((names == null) || (filter == null)) {
	    return names;
	}
	ArrayList v = new ArrayList();
	for (int i = 0 ; i < names.length ; i++) {
            //这里的this为当前文件夹。为File类。
	    if (filter.accept(this, names[i])) {
		v.add(names[i]);
	    }
	}
       //最后强转?
	return (String[])(v.toArray(new String[v.size()]));
}

6.delete

只能删除空文件夹和单个文件。

 

7.构造函数的路径

new  File("src.txt");//出现在当前项目中的根目录。
new File("src/abc.txt");//在当前项目中的根目录下的src文件夹下。
new File("/abc.txt");//在当前盘符的根目录下。

new File(new File("C:\abc"),"xyz\abc.txt");
//创建的目录为C:\abc\xyz\abc.txt
 

不看了

分享到:
评论

相关推荐

    linux有关file的源码

    总的来说,研究`file`的源码可以帮助我们理解Linux内核如何管理文件,如何进行高效的数据读写,以及如何处理并发访问和权限控制。这对于系统编程、内核模块开发、性能优化等领域都是非常宝贵的资料。深入学习这部分...

    linux的file命令源码

    这个命令源码的保存,对于深入理解Linux系统、软件开发以及学习文件检测技术具有很高的价值。这里我们将详细探讨`file`命令的工作原理、源码结构以及可能的研究方向。 `file`命令的核心功能是通过分析文件的二进制...

    pefile源码库

    总结来说,`pefile`是一个强大的工具,对于理解和处理Windows PE文件格式的开发者来说非常有价值。它提供了丰富的API,使得分析、调试和安全检查PE文件变得简单。无论是逆向工程、恶意软件分析还是软件开发,`pefile...

    Java GUI File 源码实例

    "Java GUI File 源码实例"很显然是一个包含具体代码示例的资源,旨在帮助开发者理解和学习如何在Java中处理文件操作和创建GUI。 在这个源码实例中,可能涵盖了以下几个关键知识点: 1. **Swing组件**:Swing是Java...

    fileManager 文件管理源码

    总的来说,"fileManager 文件管理源码" 是一个集成了文件操作、Web交互、权限控制等多个技术点的系统,对于学习和理解Java Web开发,特别是文件管理相关的功能实现,有着很高的参考价值。深入研究其源码可以帮助我们...

    Open_File的软件源码

    《Open_File软件源码解析与应用》 Open_File是一个在编程领域中常见的示例,尤其在Visual Basic...通过深入研究Open_File源码,开发者不仅可以提升对VB文件操作的理解,也能更好地应对实际开发中的各种文件处理需求。

    ExtJs框架系列之filetree 源码

    在学习和使用FileTree时,我们需要理解以下几个关键概念: - **Ext.data.TreeStore**:存储文件系统数据的模型,负责数据的加载和更新。 - **Ext.tree.Panel**:展示TreeStore数据的组件,FileTree通常基于此组件...

    IRP_FILE 源码

    总之,IRP_FILE 源码提供了一种深入理解Windows内核中文件操作的方法,通过对IRP的处理,我们可以直接在驱动级别控制文件操作,这对于系统级开发和调试工作至关重要。通过研究"Irp-Files"中的代码,开发者可以学习到...

    Android源码 文件管理器FileManager

    《Android源码解析:深入理解FileManager》 在Android操作系统中,文件管理器是不可或缺的一部分,它使得用户能够方便地管理手机上的文档、图片、视频等各种类型的文件。本篇将深入探讨Android源码中的FileManager...

    java中IO流里面的关于File的讲解源码

    在Java编程语言中,`File`类是处理文件和目录的核心类,位于`java.io`包下。...通过阅读源码和注释,初学者能更深入地理解这些概念,从而提升编程技能。记得在实际操作中,始终注意异常处理,以确保程序的健壮性。

    FileManager源码与Jar压缩文件

    《 FileManager源码与Jar压缩文件详解 》 在IT行业中,高效、简洁的文件操作是开发者经常面临的问题。本文将深入探讨"FileManager源码与Jar压缩文件"这一主题,为移动应用开发提供一种简便的文件处理方案。 File...

    opus-file源码

    在分析"opus-file"源码前,我们先了解一些基本概念: 1. **Opus编码器**:Opus编码器将原始音频数据转换为高效的数据流,以便在网络上传输。它能自适应不同带宽条件,确保在各种网络环境下都能保持高质量的音频体验...

    FileTool源码

    "FileTool"源码的分析和学习可以帮助我们理解如何扩展IDE的功能,以及如何处理文件管理相关的操作。源码通常包含了软件的核心逻辑,通过阅读源码,我们可以深入理解其工作原理,并可能根据自身需求进行定制化开发。 ...

    Android应用源码之iconFile_源码.zip

    在Android应用开发中,...通过深入研究源码,开发者不仅能理解图标如何与应用结合,还能学习到如何优化图标的表现,提升用户体验。对于想要深入了解Android应用图标设计和实现的开发者来说,这是一个很好的学习资料。

    pefile source code

    《Portable Executable (PE) 文件格式深度解析及pefile源码分析》 Portable Executable (PE) 文件格式是Windows操作系统...通过阅读和研究pefile源码,我们可以进一步提升对PE格式的理解,增强在相关领域的实践能力。

    FileSearch_文件搜索程序及源码_

    本文将详细探讨FileSearch的实现原理、核心功能以及源码分析,以期为读者提供深入理解。 1. 文件搜索基础 文件搜索通常涉及文件系统遍历和关键词匹配两部分。文件系统遍历是通过遍历硬盘上的目录结构来寻找符合要求...

    Android FileManager文件管理器源码

    《深入解析Android FileManager文件管理器源码》 在Android系统中,文件管理器是一个至关重要的组件,它允许用户浏览、操作、创建、删除以及管理设备上的文件和目录。本篇文章将详细探讨一个基于Android的文件管理...

    安卓Android源码——Mi_FileExplorer.zip

    在安卓开发领域,深入理解源码对于提升应用性能和优化用户体验至关重要。本资源"安卓Android源码——Mi_FileExplorer.zip"提供的是小米公司MIUI系统中的内置文件管理器Mi_FileExplorer的源代码,这对于开发者来说是...

    Windows NT File System Internals(随书源码)

    《Windows NT 文件系统内部机制》随书源码包含了一系列与文件过滤驱动相关的代码示例,这对于深入理解Windows操作系统中的文件系统工作原理以及如何开发文件过滤驱动程序至关重要。文件过滤驱动(File Filter Driver...

    tftp源码.rar_tftp_tftp 源码_tftp客户端源码_tftp服务端代码_tftp源码

    《深入理解TFTP:从源码到应用》 TFTP(Trivial File Transfer Protocol),简单文件传输协议,是一种轻量级的文件传输协议,主要用于在简单的网络环境或低性能设备间进行文件传输。本文将围绕TFTP的源码展开,探讨...

Global site tag (gtag.js) - Google Analytics