1.文件操作简介

    java.io.File  File的每一个实例可以表示文件系统中的一个文件或目录,使用File可以:(1)访问文件或目录的属性(大小、名字、修改时间等);(2)操作文件或目录(创建、删除文件和目录);(3)访问目录中的所有内容。

    但是不可以访问文件数据。

    小实例:    

public class FileDemo1 {
	public static void main(String[] args) {
		File file=new File("."+File.separator+"demo.txt");
		
		//获取名字
		String name=file.getName();
		System.out.println("name:"+name);
		
		//大小
		long length=file.length();
		System.out.println("大小为:"+length+"字节");
		
		//是是否是文件
		boolean isFile=file.isFile();
		System.out.println("是否为文件:"+isFile);
		
		//是否为目录
		boolean isDirectory=file.isDirectory();
		System.out.println("是否为目录:"+isDirectory);
		
		//是否可读
		boolean canRead=file.canRead();
		System.out.println("是否可读:"+canRead);
		//是否隐藏了
		boolean isHidden=file.isHidden();
		System.out.println("是否隐藏了"+isHidden);
		
		//最后修改时间
		long time=file.lastModified();
		Date date=new Date(time);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
		System.out.println(sdf.format(date));
	}
}



2.创建一个新文件

    小实例:

public class FileDemo2 {
	public static void main(String[] arrays) throws IOException {
		/*
		 * 在当前目录下创建test.txt
		 * boolean exists()
		 * 判断该文件是否真实存在
		 */
		File file=new File("test.txt");
		if(!file.exists()) {
			file.createNewFile();
			System.out.println("创建完毕");
		}else {
			System.out.println("文件已经存在");
		}
	}
}

3.删除一个文件

    小实例:

public class FileDemo3 {
	public static void main(String[] args) {
		/*
		 * 删除当前目录中的test.txt文件
		 */
		File file=new File("test.txt");
		if(file.exists()) {
			file.delete();
			System.out.println("删除完毕");
		}else {
			System.out.println("文件不存在");
		}
	}
}

4.创建一个新目录

    小实例:

public class FileDemo4 {
	public static void main(String[] args) {
		/*
		 * 在当前目录下创建一个名为demo的目录
		 */
		File dir=new File("demo");
		if(!dir.exists()) {
			dir.mkdir();
			System.out.println("创建目录成功");
		}else {
			System.out.println("该目录已存在");
		}
	}
}

5.创建一个多级目录

    小实例:

public class FileDemo5 {
	public static void main(String[] args) {
		/*
		 * 在当前目录下创建
		 * ./a/b/c/d/e/f目录
		 */
		File dir=new File(
				"a"+File.separator+
				"b"+File.separator+
				"c"+File.separator+
				"d"+File.separator+
				"e"+File.separator+
				"f"
				);
		if(!dir.exists()) {
			dir.mkdirs();
			System.out.println("多级目录创建成功");
		}else {
			System.out.println("目录已经存在");
		}
	}
}

6.获取一个目录中的所有子项

public class FileDemo7 {
	public static void main(String[] args) {
		/*
		 * 获取当前目录中的所有子项
		 */
		File dir=new File(".");
		/*
		 * boolean isFile()
		 * 判断是否为一个文件
		 * 
		 * boolean isDirectory
		 * 判断是否为一个目录
		 */
		if(dir.isDirectory()) {
			/*
			 * File[] listFiles()
 			 */
			File[] subs=dir.listFiles();
			for(File sub:subs) {
				if(sub.isFile()) {
					System.out.print("文件:");
				}else {
					System.out.print("目录:");
				}
				System.out.println(sub.getName());
			}
		}
	}
}

7.获取一个目录中符合条件的部分子项

    使用重载的listFiles方法,需要传入一个额外的文件过滤器,文件过滤器是一个接口:FileFilter

    小实例:    

public class FileDemo8 {
	public static void main(String[] args) {
		File file=new File(".");
		/*
		 * 获取名字以"."开头的子项
		 */
		File[] subs=file.listFiles(new FileFilter() {
			
			@Override
			public boolean accept(File file) {
				// TODO Auto-generated method stub
				return file.getName().startsWith(".");
			}
		});
		for(File sub:subs) {
			System.out.println(sub.getName());
		}
	}
}

8.删除多级目录下的给定的文件

    小实例:

/**
 * 实现方法,来删除给定的文件
 * @author Administrator
 *
 */
public class Test {
	public static void main(String[] args) {
		File dir=new File("a");
		delete(dir);
	}
	//删除目录或文件对象
	public static void delete(File file) {
		if(file.isDirectory()) {
			//现将其所有子项列出来
			File[] subs=file.listFiles();
			for(File sub:subs) {
				delete(sub);//递归调用
			}
		}
		file.delete();
	}
	
}

9.RandomAccessFileDemo

    java.io.RandomAccessFile  用来读写文件数据,RAF是基于指针进行读写的,即RAF总是在指针指向的位置读写字节,并且读写后指针会自动向后移动。RAF即可以读取文件数据也可以向文件中写入数据。读取低8位的数据。

public class RandomAcessFileDemo1 {
	public static void main(String[] args) throws IOException {
		/*
		 * RandomAccessFile(String path,String mode)
		 * 
		 * RandomAceesFile(File file,String mode)
		 * 第二个参数为模式:常用的有
		 * r:只读模式
		 * rw:读写模式
		 */
		RandomAccessFile raf=new RandomAccessFile("raf.dat","rw");
		/*
		 * void write(int b)
		 * 写出对应的int值对应的2进制的低8位
		 * 							  xxxxxxxx
		 * 00000000 00000000 00000000 00000001
		 */
		raf.write(97);
		System.out.println("写出完毕");
		raf.close();
	}
}

10.读写文件数据

    小实例:

/**
 * 读取文件数据
 * @author Administrator
 *
 */
public class RandomAccessFileDemo2 {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf=new RandomAccessFile("raf.dat", "r");
		/*
		 * int read()
		 * 读取一个字节并以十进制的int型表示
		 */
		int d=raf.read();
		System.out.println(d);
		raf.close();
	}
}

11.RAF提供了方便读写基本类型数据的方法

/**
 * RAF提供了方便读写基本类型数据的方法
 * @author Administrator
 *
 */
public class RandomAccessFileDemo3 {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf=new RandomAccessFile("raf1.dat","rw" );
		
		/*
		 * long getFilePointer()
		 * 获取当前RAF的指针位置
		 */
		System.out.println("pos1:"+raf.getFilePointer());
		
		//向文件中写入一个int最大值
		int max=Integer.MAX_VALUE;
		
		
		raf.write(max>>>24);
		raf.write(max>>>16);
		raf.write(max>>>8);
		raf.write(max);
		System.out.println("pos2:"+raf.getFilePointer());
		
		raf.writeInt(max);
		
		raf.writeLong(1234L);
		
		raf.writeDouble(123.123);
		System.out.println("pos3:"+raf.getFilePointer());
		
		/*
		 * void seek(long pos)
		 * 移动指针到指定位置
		 */
		raf.seek(0);
		System.out.println("pos4:"+raf.getFilePointer());
		
		int Max=raf.readInt();
		System.out.println("max:"+Max);
		raf.close();
	}
}

12.复制文件的实例demo1:

public class CopyDemo1 {
	public static void main(String[] args) throws IOException {
		/*
		 * 创建一个RAF读取原文件,再创建一个RAF向目标文件中写出
		 * 顺序从原文件中读取每一个字节并写入到目标文件中即可
		 */
		RandomAccessFile src=new RandomAccessFile("music.mp3", "r");
		
		RandomAccessFile desc=new RandomAccessFile("music_cp.mp3", "rw");
		//保存复制的字节
		int d=-1;
		long start=System.currentTimeMillis();
		while((d=src.read())!=-1) {
			desc.write(d);
		}
		long end=System.currentTimeMillis();
		System.out.println("复制完毕,耗时为:"+(end-start)+"毫秒");
		src.close();
		desc.close();
	}
}

13.复制文件的实例demo2:

/**
 * 若想提高读写效率,可以通过提高每次读写的数据量来减少读写次数达到
 * @author Administrator
 *
 */
public class CopyDemo2 {
	public static void main(String[] args) throws IOException {
		RandomAccessFile src=new RandomAccessFile("music.mp3", "r");
		RandomAccessFile desc=new RandomAccessFile("m_cp.mp3","rw");
		/*
		 * int read(byte[] data)
		 * 一次性尝试读取给定的字符长度的字节量并存入到该数组中
		 * 返回值为实际读取大ode字符量
		 * 若返回值为-1,则本次没有读取任何数据
		 */
		//10K
		byte[] buf=new byte[1024*10];
		/*
		 * void write(byte[] d,int start,int end)
		 * 将给定数组中从下表start到end个连续个字节独处
		 */
		int len=-1;
		long start=System.currentTimeMillis();
		while((len=src.read(buf))!=-1) {
			desc.write(buf,0,len);//从buf数组中从0读到len个
		}
		long end=System.currentTimeMillis();
		System.out.println("复制完毕,耗时为"+(end-start)+"毫秒");
		src.close();
		desc.close();
	}
}