Java File类学习笔记2:File类对象及常用操作方法

一、 文件、相对路径与绝对路径

1.文件

(1)标准文件:就像图片,音乐文件等。

(2)目录文件:也就是平常所说的文件夹。

(3)虚拟内存文件:系统在运行程序时生成的临时性文件。

2.文件的路径

(1)相对路径:相对于某一文件的路径,形象地说是把两文件的绝对路径相同的部分砍掉,剩下的就是相对路径

如:

A文件是"D:\MyDocuments\StudySample\src\cn\xmh",

B文件是"D:\MyDocuments\StudySample\src\netjava\cjl",

则B相对A的路径是"\netjava\cjl";

(2)绝度路径:从磁盘根目录算起的路径名

如:"G:\TDDOWNLOAD\数据结构"

3.关于系统路径分隔符

在Windows中,使用反斜杠“\”作为路径分割符,比如“c:\test”,但是Java中反斜杠表示转义,所以需要用“C:\\test”在程序中来表示路径。还可以使用“C:/test”进行路径的表示,这种表示方法在linux中也适用。

同时也可以使用File类中定义的常量separator来代替路径分割符,这样在各个系统中都可以使用。

如File file = new File("c:" + File.separator
+ "test.txt”);

单独的separater表示根的意思,如果在根下创建文件,相当于在程序路径的根路径下创建文件。

二、File类对象及常用操作方法

1.最常用的一种,根据字符串型的路径名创建文件对象

在整个IO包中,唯一表示与文件本身有关的类就是File类。我们可以用File类创建文件对象,并对文件对象进行各种操作,

publicFile(String pathname)实例化File类的时候,必须设置好路径

示例:

import java.io.File;
public class FileDemo {
	public static void main(String[] args) {
		// 构造函数File(String pathname)
		File f1 = new File("d:\\daxiang\\1.txt");
		// File(String parent,String child)
		File f2 = new File("d:\\daxiang", "2.txt");
		// File(File parent,String child)
		File f3 = new File("d:" + File.separator + "abc");// separator 跨平台分隔符
		File f4 = new File(f3, "3.txt");
		System.out.println(f1);// d:\daxiang\1.txt
		System.out.println(f2);// d:\daxiang\2.txt
		System.out.println(f3);// d:\abc
		System.out.println(f4);// d:\abc\3.txt
	}
}

注意:在使用File类指定路径的时候一定要注意操作系统间的差异,尽量使用separator进行分割

2.文件对象操作方法

要想使用File类,则首先要观察File类的方法,此类的常用方法如下所示:

上面表格中只列出了常用方法的的一部分,下面再分类列举出常用的方法:

创建方法

(1)boolean createNewFile()  //用来创建标准文件的方法

使用File file = new File(path)只是指定了文件创建的路径,但是文件还没有生成,另外如果路径不存在,那么文件将不会创建成功

(2)boolean mkdir()  //创建目录:根据File对象的名字(路径)创建一个目录(文件夹),如果是相对目录,则新建的目录在当前目录下

(3)boolean mkdirs()  //创建多级目录:如果File对象名字有多级目录,则可以调用该方法一次性创建多级目录

mkdirs()可以建立多级文件夹(目录), mkdir()只能创建一层目录

如:

Filefile = new File("c:/aa");

file.mkdir(); //这样可以在c:/下创建aa目录

假如有多层目录,则不能用mkdir创建,如:

Filefile = new File("c:/aa/bb");

file.mkdir() //这样创建不了.

这样不会建立任何目录, 因为找不到/tmp/one/two目录, 结果返回false

应该改为:mkdirs()

删除方法

(1)boolean delete()

(2)boolean deleteOnExit()  //文件使用完成后删除

判断方法

(1)boolean canExecute()  //判断文件是否可执行

(2)boolean canRead()  //判断文件是否可读

(3)boolean canWrite()  //判断文件是否可写

(4)boolean exists()  //判断文件是否存在

(5)boolean isDirectory() //判断File对象指向的文件是否为目录,返回一个boolean类型的值,true或者false

(6)boolean isFile() //判断File对象指向的文件是否是标准文件,返回一个boolean类型的值,true或者false

(7)boolean isHidden()

(8)boolean isAbsolute()  //判断是否是绝对路径 文件不存在也能判断

获取方法

(1)StringgetName()  //获取文件的名字(不带文件的路径),返回的是String类型的值

(2)String getPath()

(3)String getAbsolutePath()

(4)String getParent()  //如果没有父目录返回null

(5)long lastModified()  //获取最后一次修改的时间

(6)long length()  //得到File对象指向文件的长度,以字节计算,返回一个长整形的值(long)

注意:在系统中,文件夹(目录)的大小为零,也就是不占用空间,使用length()时返回的是0

(7)boolean renameTo(File f)  //重新命名此抽象名称指定的文件

f-- 新抽象路径名的抽象路径名,如果重命名成功此方法返回true,否则返回false

(8)File[] listRoots()  //返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录。

(9)String[] list()

(10)String[] list(FilenameFilter filter)

各个方法的简单实现如下:

import java.io.File;

public class FileExercise {
	public static void main(String[] args) throws Exception {

		System.out.println("当前操作系统的名称分隔符是:" + java.io.File.separator);
		System.out.println("当前操作系统的路径分隔符是:" + java.io.File.pathSeparator);
		// 字符串类型的文件名
		String fileName = "daxiang.txt";
		// 实例化文件对象
		File file = new File("src", fileName);
		File file1 = new File("D:\\daxiang\\testjava\\src\\txt");
		File file2 = new File("D:\\daxiang\\testjava\\src");
		// 创建一个文件
		file.createNewFile(); //注意file是抽象路径,此时会在当前java工程下的src文件夹下创建一个daxiang.txt文件

		boolean b;// 申明一个boolean类型的变量

		// 测试应用程序是否可以执行该文件
		b = file.canExecute();
		System.out.println("测试应用程序是否可以执行该文件" + b);

		// 测试用用程序是否可以读取该文件
		b = file.canRead();
		System.out.println("测试用用程序是否可以读取该文件" + b);

		// 测试用用程序是否可以修改该文件
		b = file.canWrite();
		System.out.println("测试用用程序是否可以修改该文件" + b);

		// 测试此抽象路径名表示的文件或目录是否存在。
		b = file.exists();
		System.out.println("测试此抽象路径名表示的文件或目录是否存在" + b);

		// 按字母顺序比较两个抽象路径名
		int i = file.compareTo(file1); //compareTo方法,返回参与比较的前后两个字符串的ASCII码的差值
		System.out.println(i);

		String path;
		// 返回此抽象路径名的绝对路径名字符串
		path = file.getAbsolutePath();
		System.out.println(path);

		// 返回此抽象路径名的规范路径名字符串
		path = file.getCanonicalPath();
		System.out.println(path);

		long free;
		// 返回此抽象路径名指定的分区中未分配的字节数
		free = file.getFreeSpace();
		System.out.println("此抽象路径名指定的分区中未分配的字节数" + free);

		// 返回由此抽象路径名表示的文件或目录的名称
		String name;
		name = file.getName();
		System.out.println(name);
		name = file1.getName();
		System.out.println(name);

		// 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
		String parentpath;
		parentpath = file.getParent();
		System.out.println(parentpath);
		parentpath = file1.getParent();
		System.out.println(parentpath);

		// 返回此抽象路径名指定的分区上可用于此虚拟机的字节数
		free = file.getUsableSpace();
		System.out.println("此抽象路径名指定的分区上可用于此虚拟机的字节数" + free);

		// 计算此抽象路径名的哈希码
		i = file.hashCode();
		System.out.println(i);

		// 测试此抽象路径名是否为绝对路径名
		b = file.isAbsolute();
		System.out.println("file对象的抽象路径名是否为绝对路径名:" + b);
		b = file1.isAbsolute();
		System.out.println("file1对象的抽象路径名是否为绝对路径名:" + b);

		// 返回此抽象路径名表示的文件最后一次被修改的时间
		long time = file.lastModified();
		System.out.println(time);

		// 返回由此抽象路径名表示的文件的长度
		long length = file.length();
		System.out.println("文件的长度:" + length);
		System.out.println();

		// 注意list()和listFile()的区别
		// list()-->返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
		String[] array1 = file2.list();
		for (i = 0; i < array1.length; i++) {
			System.out.println(array1[i]);
		}
		System.out.println();

		// listFiles()-->返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
		File[] array2 = file2.listFiles();
		for (i = 0; i < array2.length; i++) {
			System.out.println(array2[i]);
		}
		System.out.println();

		// listRoots()-->列出可用的文件系统根,静态方法
		File[] roots = File.listRoots();
		for (i = 0; i < roots.length; i++) {
			System.out.println(roots[i]);
		}
		System.out.println();

		// 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
		// file.deleteOnExit();

		// 创建此抽象路径名指定的目录
		file1.mkdir();
		// 重新命名此抽象路径名表示的文件
		File file4 = new File("src\\重命名文件");
		System.out.println(file1.renameTo(file4));
		// 设置文件只读
		file.setReadOnly();
		// 设置文件可写
		file.setWritable(true);
	}
}

三、File类常用操作实例

<span style="font-size:14px;">/**
 * 实例操作一:创建一个新文件
 * 在D盘创建一个test.txt文件
 */
import java.io.File;
import java.io.IOException;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator + "test.txt");// 为增加可移植性,建议使用File.separator
		try {
			f.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

/**
 * 实例操作二:删除一个指定文件
 * 删除刚刚在D盘创建的test.txt文件
 */
import java.io.File;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator + "test.txt");
		if (f.exists()) {// 判断文件存不存在,如不存在就不用删除了
			f.delete();
		}
	}
}

/**
 * 实例操作三:综合创建、删除文件的操作
 * 给定一个路径,如果此文件存在,则删除,如果不存在,则创建
 */
import java.io.File;
import java.io.IOException;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator + "test.txt");
		if (f.exists()) {
			f.delete();
		} else {
			try {
				f.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

/**
 * 实例操作四:创建一个文件夹
 * 使用mkdir()方法创建一个文件夹
 */
import java.io.File;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator + "test");
		f.mkdir();// 创建文件夹
	}
}

/**
 * 实例操作五:列出指定目录的全部文件
 * 如果现在给出了一个目录,则可以直接列出目录中的内容。但是列出的方法在File类中存在两个:
 * 以字符串数组的形式返回:public String[] list()
 * 以File数组的形式返回:public File[] listFiles()
 */
/**
* 实例操作五:列出指定目录的全部文件
 * 操作一:使用list()列出全部内容
 * 该方法列出了D盘下的文件夹和文件的名字
 */
import java.io.File;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator);
		String[] str = f.list();
		for (String s : str) {
			System.out.println(s);
		}
	}
}

/**
 * 实例操作五:列出指定目录的全部文件
 * 操作二:使用listFiles()列出
 * 列出了完全路径
 */
import java.io.File;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator);
		File[] files = f.listFiles();
		for (File file : files) {
			System.out.println(file);
		}
	}
}

/**
 * 实例操作六:判断一个给定的路径是否目录
 * 给定路径,判断是否是目录
 */
import java.io.File;

public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator);
		if (f.isDirectory()) {
			System.out.println(f.getPath() + "是目录");
		} else {
			System.out.println(f.getPath() + "不是目录");
		}
	}
}

/**
 * 实例操作七:列出指定目录的全部内容(递归)
 * 如果给定了一个目录,则要求把此目录中的全部文件都列出来,包括子文件夹下的文件
 */
import java.io.File;
public class FileOperate {
	public static void main(String[] args) {
		File f = new File("d:" + File.separator);
		print(f);
	}

	public static void print(File f) {
		if (f != null) {
			if (f.isDirectory()) {
				File[] files = f.listFiles();
				if (files != null) {
					for (File file : files) {
						print(file);
					}
				}
			} else {
				System.out.println(f);
			}
		}
	}
}

/**
 * 实例操作八:列出磁盘下的路径名
 * @param public static File[] listRoots()
 * @return 该方法返回指示可用的文件系统的根文件对象的数组。如果不能确定该组的根该方法返回null。
 */
import java.io.File;
public class FileDemo {
	public static void main(String[] args) {

		File[] paths;

		try {
			// returns pathnames for files and directory
			paths = File.listRoots();

			// for each pathname in pathname array
			for (File path : paths) {
				// prints file and directory paths
				System.out.println(path);
			}
		} catch (Exception e) {
			// if any error occurs
			e.printStackTrace();
		}
	}
}

/**
 * 实例操作九:列出磁盘下的文件和文件夹
 * @param public static File[] listRoots()
 * @return 该方法返回指示可用的文件系统的根文件对象的数组。如果不能确定该组的根该方法返回null。
 */
import java.io.File;

public class FileDemo {
	public static void main(String[] args) {

		File[] files = File.listRoots();
		for (File file : files) {
			System.out.println(file);
			if (file.length() > 0) {
				String[] filenames = file.list();
				for (String filename : filenames) {
					System.out.println(filename);
				}
			}
		}
	}
}

/**
 * 实例操作十:文件过滤
 * @param FilenameFilter类
 * @return
 */
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;

public class FileDemo {
	public static void main(String[] args) throws IOException {

		File dir = new File("d:\\daxiang\\testjava");

		File[] files = dir.listFiles(new FilenameFilter() {
			// 获取.java文件时使用listFiles(FilenameFilter filter)方法,创建一个过滤文件名的Filter
			public boolean accept(File dir, String name) {
				if (name != null && "".equals("")) {
					// 检测文件名是否是以.saz结尾,是返回true,否则继续检测下一个文件
					if (name.toLowerCase().endsWith(".java")) {
						return true;
					}
				}
				return false;
			}
		});

		for (File file : files) {
			System.out.println(file);
		}
	}
}</span>

四、file.getPath()getAbsolutePath()
getCanonicalPath()区别

可以参考的文章:File类的getPath、getAbsolutePath和getCanonicalPath的不同

import java.io.File;
import java.io.IOException;

public class getFilePath {
	public static void main(String[] args) throws IOException {
		System.out.println("------默认相对路径,取得路径不同-----");
		File f = new File("..\\src\\file");
		System.out.println(f.getPath());
		System.out.println(f.getAbsolutePath());
		System.out.println(f.getCanonicalPath());
		System.out.println("------默认相对路径,取得路径不同-----");
		File f2 = new File(".\\src\\file");
		System.out.println(f2.getPath());
		System.out.println(f2.getAbsolutePath());
		System.out.println(f2.getCanonicalPath());
		System.out.println("------默认绝对路径,取得路径相同-----");
		File f3 = new File("C:\\src\\file");
		System.out.println(f3.getPath());
		System.out.println(f3.getAbsolutePath());
		System.out.println(f3.getCanonicalPath());

		// 执行结果为:
		// ------默认相对路径,取得路径不同-----
		// ..\src\file
		// C:\workspace\Tip\..\src\file
		// C:\workspace\src\file
		// ------默认相对路径,取得路径不同-----
		// .\src\file
		// C:\workspace\Tip\.\src\file
		// C:\workspace\Tip\src\file
		// ------默认绝对路径,取得路径相同-----
		// C:\src\file
		// C:\src\file
		// C:\src\file
		//
		// 比较可以得到
		// getPath()返回的是构造方法里的路径,不做任何处理
		// getAbsolutePath()返回的是 user.dir+getPath(),也就是执行路径加上构造方法中的路径
		// getCanonicalPath()返回的是将符号完全解析的路径,也就是全路径
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 21:46:01

Java File类学习笔记2:File类对象及常用操作方法的相关文章

java/android 设计模式学习笔记(5)---对象池模式

这次要介绍一下对象池模式(Object Pool Pattern),这个模式为常见 23 种设计模式之外的设计模式,介绍的初衷主要是在平时的 android 开发中经常会看到,比如 ThreadPool 和 MessagePool 等. 在 java 中,所有对象的内存由虚拟机管理,所以在某些情况下,需要频繁创建一些生命周期很短使用完之后就可以立即销毁,但是数量很大的对象集合,那么此时 GC 的次数必然会增加,这时候为了减小系统 GC 的压力,对象池模式就很适用了.对象池模式也是创建型模式之一,

[Java编程思想-学习笔记]第1章 对象导论

1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, Run Anywhere". 所谓的抽象过程,可以理解为对待解问题建模.比如待解问题是一个人,那么我们可以对人进行建模,它的类型是人,有属性姓名.性别.年龄,还有行为吃饭.走路.Java能直接完全据此建模编码,而无需考虑具体的计算机结构.所以当我们阅读Java程序时,正如书上说的"当你在

Java并发编程学习笔记(二)——对象的共享

主要概念:可见性.重排序.失效数据.最低安全性.发布.逸出.线程封闭(Ad-hoc.栈封闭.ThreadLocal类).不变性.Final域.事实不可变对象. 1.在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,几乎无法得出正确的结论. 2.在多线程中使用共享且可变的long和double等类型的变量是不安全的,除非用关键字volatile来声明它们,或者用锁来保护他们. 3.加锁的含义不

Java编程思想学习笔记十一:持有对象

一.基本概念 1.Collecction:一个独立元素的序列,这些元素服从一条或多条规则.list必须按照插入的顺序保存元素:set不能有重复的元素:Queue按照排队规则来确定对象产生的顺序 2.Map:映射表,一组由成对的键值对对象,允许使用键来查找值 1 package holding; 2 import java.util.*; 3 4 public class SimpleCollection { 5 public static void main(String[] args){ 6

Java Object类学习笔记

看下Api文档的一些说明 public class Object Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. Since: JDK1.0 从JDK1.0就已经存在的元老类,类结构的根,所有类的父类,所有类都实现了这个类的方法,包含

Apache commons lang工具类学习笔记(2)--StringUtils

StringUtils工具类具有对String具有简单而强大的处理能力,从检查空串到分割字符串,到生成格式化的字符串,使用都很方便简洁,能减少很多代码量; 详细的使用方法可以参考下面的例子或者官方的API(http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isAlpha(java.lang.CharSequence)) packa

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

Collection类学习笔记

binarySearch原理: public static index halfSearch(List<String> list, String key) { int max,min,mid; max = list.size()-1; min = 0; while(min<=max) { mid = (max+min) >>1; String str = list.get(mid); int num = str.compareTo(key); if(num > 0) m

angular学习笔记(九)-css类和样式3

再来看一个选择li列表的例子: 点击li中的任意项,被点击的li高亮显示: <!DOCTYPE html> <html ng-app> <head> <title>6.3css类和样式</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="scri