输入和输出--File类

  • 输入和输出
写在前面的:Java中的输入和输出还是比较重要的,之前我都没想整理IO和多线程的,但是在研究后面的好多东西时候,经常要读取资源文件,这个时候就不得不回过头来整理IO了。要玩熟Java的输入和输入,就必须先玩熟一个类:File。然后在就是Java.io包下的类和接口了。Java的IO主要包括了输入和输出2种流,每种输入和输出又分为字节流和字符流。值得注意和研究的是Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流。除此之外,还要研究2个东西:1,Java对象的序列化机制;2,全新API,Java的nio。
  • File类
File类是Java.io包下代表与平台无关的文件和目录,注意:不管是文件还是目录都可以使用File类操作,但是File类不能访问文件内容本身。如果需要访问文件内容本身,就要使用输入和输出流。具体的方法在这里就不列出了,用到的时候查JDK就好了。值得注意的一点是:他有一个静态属性separator。这个属性表示与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。因为windows的路径分隔符使用反斜线(),而Java程序中的反斜线表示转义字符,所以如果需要在windows中路径下包括反斜线,应该用2条反斜线,比如:C:\java\LinkinPark.txt,或者直接使用斜线也可以,Java支持将斜线当成与平台无关的路径分隔符。

具体的演示代码如下:

import java.io.File;

public class Linkin
{

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

		// 以当前路径来创建一个File对象
		File file = new File(".");
		// 直接获取文件名,输出一点
		System.out.println(file.getName());
		// 获取相对路径的父路径可能出错,下面代码输出null
		System.out.println(file.getParent());
		// 获取绝对路径
		System.out.println(file.getAbsoluteFile());
		// 获取上一级路径
		System.out.println(file.getAbsoluteFile().getParent());
		// 在当前路径下创建一个临时文件
		File tmpFile = File.createTempFile("aaa", ".txt", file);
		// 指定当JVM退出时删除该文件
		tmpFile.deleteOnExit();
		// 以系统当前时间作为新文件名来创建新文件
		File newFile = new File(System.currentTimeMillis() + "");
		System.out.println("newFile对象是否存在:" + newFile.exists());
		// 以指定newFile对象来创建一个文件
		newFile.createNewFile();
		// 以newFile对象来创建一个目录,因为newFile已经存在,
		// 所以下面方法返回false,即无法创建该目录
		newFile.mkdir();
		// 使用list()方法来列出当前路径下的所有文件和路径
		String[] fileList = file.list();
		System.out.println("====当前路径下所有文件和路径如下====");
		for (String fileName : fileList)
		{
			System.out.println(fileName);
		}
		// listRoots()静态方法列出所有的磁盘根路径。
		File[] roots = File.listRoots();
		System.out.println("====系统所有根路径如下====");
		for (File root : roots)
		{
			System.out.println(root);
		}
	}

}


  • 文件过滤器
File类有2个重载的list方法,返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。其中一个可以接受FilenameFilter参数,用来过滤文件。FilenameFilter接口只有accept一个方法,用来测试指定文件是否应该包含在某一文件列表中。


以下代码列出了当前路径下所有*.java和文件夹。

import java.io.File;
import java.io.FilenameFilter;

/**
 *
 * @version 1L
 * @author  LinkinPark 
 * @since   2014-12-30
 * @motto   梦似烟花心似水,同学少年不言情
 * @desc    ^这里用到了典型的command设计模式。Java不支持传一段代码块进方法,所以这里使用accept来封装相关过滤的代码块。
 */
public class Linkin
{

	public static void main(String[] args)
	{
		File file = new File(".");
		String[] nameList = file.list(new MyFilenameFilter());
		for (String name : nameList)
		{
			System.out.println(name);
		}
	}
}

// 实现自己的FilenameFilter实现类
class MyFilenameFilter implements FilenameFilter
{
	public boolean accept(File dir, String name)
	{
		// 如果文件名以.java结尾,或者文件对应一个路径,返回true
		return name.endsWith(".java") || new File(name).isDirectory();
	}

}


原文地址:https://www.cnblogs.com/LinkinPark/p/5233109.html