二十七,File类

Java IO实际上很好的体现了java面向对象的设计思想.

一个接口和抽象类的具体行为由子类决定,根据实例化子类的不同完成的功能也不同,java IO所有的操作类都在java.io包中.

主要的类和接口是 File ,InputStream, OutputStream, Reader, Writer, Serializable接口.

1.File类简介

尽管java.io定义的大多数类是实行流式操作的,File类不是.它直接处理文件和文件系统.也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性.File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径.此外,File还浏览子目录层次结构.很多程序中文件是数据的根源和目标.尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源.Java中的目录当成File 对待,它具有附加的属性——一个可以被 list( )方法检测的文件名列表.

下面的构造函数可以用来生成File 对象:

  • File(String directoryPath)

  • File(String directoryPath, String filename)

  • File(File dirObj, String filename)

这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象.

例如:

  • File f1 = new File("/");

  • File f2 = new File("/","autoexec.bat");

  • File f3 = new File(f1,"autoexec.bat");

File 定义了很多获取File对象标准属性的方法.例如getName( )返回文件名,getParent( )返回父目录名,exists( )在文件存在的情况下返回true,反之返回false.然而File类是不对称的.说它不对称,意思是虽然存在允许验证一个简单文件对象属性的很多方法,但是没有相应的函数来改变这些属性.

示例 :

package com.ares.test;
import java.io.File;
import java.io.IOException;
public class CreatFile {
	public static void main(String[] args) throws InterruptedException {
		File file = new File("/home/ares/file.txt");
		try {
			file.createNewFile(); // 创建文件
			Thread.sleep(3000);
			file.delete();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}




2.分隔符

File类提供了几个常量来应对不同平台文件分隔符的不一样.

  • 路径分隔符: public static final String pathSeparator; //”;”

  • 分隔符: public static final String separator; // “/”或者”\”

示例:

package com.ares.test;
import java.io.File;
import java.io.IOException;
public class CreatFile {
	public static void main(String[] args) throws InterruptedException {
		File file = new File(File.separator + "home" + File.separator + "ares"
				+ File.separator + "file.txt");
		try {
			file.createNewFile(); // 创建文件
			Thread.sleep(3000);
			if (file.exists()) {
				file.delete();
			} else {
				System.out.println("File is not exist! ");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
:

判断是文件还是文件夹的方法分别是: isDirectory(),isFile().


3.列出目录

列出目录操作: listFiles(),list().

示例:

package com.ares.test;
import java.io.File;
import java.io.IOException;
public class CreatFile {
	public static void main(String[] args) throws InterruptedException {
		File file2 = new File(File.separator + "home" + File.separator + "ares");
		String a[] = file2.list();  //列出文件名
		File[] a2 = file2.listFiles();  //列出文件名还有路径
		for (String f : a) {
			System.out.println(f);
		}
		for (File f : a2) {
			System.out.println(f);
		}
	}
}




4.创建文件夹

创建文件夹的方法: mkdir()

示例:

File file = new File(File.separator + "home" + File.separator + "ares"

+ File.separator + "aresxiong" + File.separator + "file.txt");

file.getParentFile().mkdir(); //表示创建aresxiong文件夹,否则在createNewFile时报错.

示例:(列出全部文件)

package com.ares.filedemo;
import java.io.File;
public class ListDirectoryDemo {

	public static void main(String[] args) {
		File file = new File("d:" + File.separator);
		list(file);
	}
	public static void list(File file) {
		if (file.isDirectory()) {
			File lists[] = file.listFiles();
			if (lists != null) {
				for (int i = 0; i < lists.length; i++) {
					list(lists[i]);  // 递归调用,列出内容
				}
			}
		}
		System.out.println(file);
	}
}




5.RandomAccessFile

随机读取类,可以随即读取文件中的数据.要想实现随即读取,需要保证数据的一致性,否则无法完成此功能.需要接收一个File 实例,并且指定操作模式.操作模式有读模式,写模式和读写模式.

5.1写入操作

示例:

package com.ares.randomaccessdemo;
import java.io.File;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo {
	public static void main(String[] args) throws Exception {// 所有异常抛出
		File file = new File("d:" + File.separator + "demo.txt");// 指定要操作的文件
		RandomAccessFile raf = new RandomAccessFile(file, "rw");// 以读写的形式进行操作
		// 写入第一条数据
		String name = "zhangsan";// 表示姓名
		int age = 30; // 表示年龄
		raf.writeBytes(name); // 以字节的方式将字符串写入
		raf.writeInt(age); // 写入整型数据
		// 写入第二条数据
		name = "lisi    ";// 表示姓名
		age = 31; // 表示年龄
		raf.writeBytes(name); // 以字节的方式将字符串写入
		raf.writeInt(age); // 写入整型数据
		// 写入第三条数据
		name = "wangwu  ";// 表示姓名
		age = 32; // 表示年龄
		raf.writeBytes(name); // 以字节的方式将字符串写入
		raf.writeInt(age); // 写入整型数据
		raf.close();// 文件操作的最后一定要关闭
	}
}

5.2 读取操作

示例:

package com.ares.randomaccessdemo;
import java.io.File;
import java.io.RandomAccessFile;
public class RandomAccessFileDemo {
	public static void main(String[] args) throws Exception {// 所有异常抛出
		File file = new File("d:" + File.separator + "demo.txt");// 指定要操作的文件
		RandomAccessFile raf = new RandomAccessFile(file, "r");// 以读的形式进行操作
		byte b[] = null;// 定义字节数组
		String name = null;
		int age = 0;
		b = new byte[8];
		raf.skipBytes(12); // 跨过第一个人的信息
		System.out.println("第二个人的信息:");
		for (int i = 0; i < 8; i++) {
			b[i] = raf.readByte(); // 读取字节
		}
		age = raf.readInt();// 读取数字
		System.out.println("\t|- 姓名:" + new String(b));
		System.out.println("\t|- 年龄:" + age);
		raf.seek(0);// 回到开始位置
		System.out.println("第一个人的信息:");
		for (int i = 0; i < 8; i++) {
			b[i] = raf.readByte(); // 读取字节
		}
		age = raf.readInt();// 读取数字
		System.out.println("\t|- 姓名:" + new String(b));
		System.out.println("\t|- 年龄:" + age);
		raf.skipBytes(12); // 跨过第二个人的信息
		System.out.println("第三个人的信息:");
		for (int i = 0; i < 8; i++) {
			b[i] = raf.readByte(); // 读取字节
		}
		age = raf.readInt();// 读取数字
		System.out.println("\t|- 姓名:" + new String(b));
		System.out.println("\t|- 年龄:" + age);
		raf.close();// 文件操作的最后一定要关闭
	}
}

6.File类补充

delete( ) 可以在目录为空时删除目录.如果删除了文件,delete( )返回true,如果文件不能被删除则返回false.Java 2 File 类增添了一些新的方法,你会发现在某些场合这些新增方法很有用.

一些最有趣的方法显示如下:

void deleteOnExit( ) java虚拟机终止时删除与调用对象相关的文件

boolean isHidden( ) 如果调用的文件是隐藏的,返回true;否则返回 false.

boolean setLastModified(long millisec) 设置由millisec指定的调用文件的时间标志,Millisec是从197011号开始的标准时间(UTC)的毫秒数

boolean setReadOnly( ) 设置调用文件为只读

并且,因为File 类现在支持Comparable 接口,compareTo( )方法也被支持.


参考:
http://blog.csdn.net/shichexixi/article/details/5563605



20150504


JAVA学习笔记系列

--------------------------------------------

                    联系方式

--------------------------------------------

        Weibo: ARESXIONG

        E-Mail: [email protected]

------------------------------------------------


你可能感兴趣的:(java,IO,File类)