java文件操作

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

	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 isDir=file.isDirectory();
		System.out.println("是目录:"+isDir);
		
		//是否为隐藏文件
		boolean isHidden=file.isHidden();
		System.out.println("是否隐藏:"+isHidden);
		
		//最后修改时间
		long time=file.lastModified();
		Date date=new Date(time);
		SimpleDateFormat sdf=new SimpleDateFormat("yyy年M月d日 HH:mm:ss");
		System.out.println(sdf.format(date));
		
		boolean canWrite=file.canWrite();//可写
		System.out.println("可写:"+canWrite);
		file.canRead();//可读
		file.canExecute();//可运行
	}
	

2. 创建一个文件

public static void main(String[] args) throws IOException {
		/*
		 * 在当前目录下创建文件test.txt 
		 * 默认路径就是当前目录,即“./”,所以可以不写
		 */
		File file=new File("./test.txt");
		/*
		 * boolean exists()
		 * 判断该文件是否真实存在
		 */
		if(!file.exists()){
			file.createNewFile();
			System.out.println("创建完毕!");
		}else{
			System.out.println("该文件已存在");
		}
		
	}

3. 删除一个文件

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 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 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. 删除目录, delete方法可以删除一个目录,但是前提是该目录必须是一个空目录

	public static void main(String[] args) {
		File dir=new File("demo");
		if(dir.exists()){
			dir.delete();
			System.out.println("删除完毕");
		}

	}

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

	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());
			}
		}
		
	}

8. 获取一个目录中符合条件的部分子项 使用重载的listFiles方法,需要传入一个额外的文件过滤器 ,文件过滤器是一个接口:FileFilter

public static void main(String[] args) {
		File dir=new File(".");//获取当前目录
		/*
		 * 获取名字以“.”开头的子项
		 */
		File[] subs=dir.listFiles(new FileFilter(){
			public boolean accept(File file) {
				return file.getName().startsWith(".");
			}
		});
		for(File sub:subs){
			System.out.println(sub.getName());
		}
	}

9. 复制文件

	public static void main(String[] args) throws IOException {
		/*
		 * 创建一个RAF读取原文件,再创建一个RAF向目标文件中写出。
		 * 顺序从原文件中读取每一个字节并写入到目标文件即可
		 */
		RandomAccessFile src=new RandomAccessFile("aaa.txt", "r");
		RandomAccessFile desc=new RandomAccessFile("aaa_cp.txt", "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)+"ms");
		src.close();
		desc.close();
	}

10. 若想提高读写效率,可以通过提高每次读写的数据量来减少读写次数达到

	public static void main(String[] args) throws IOException {
		RandomAccessFile src=new RandomAccessFile("aaa.txt", "r");
		RandomAccessFile desc=new RandomAccessFile("aaa_cp.txt", "rw");
		/*
		 * int read(byte[] data)
		 * 一次性尝试读取给定的字节数组总长度的字节量并存入到该数组中,返回值为实际读取到的字节量,
		 * 若返回值为-1,则表示本次没有读取到任何数据(文件末尾)
		 */
		
		//10k
		byte[] buf=new byte[1024*10];
		int len=-1;
		long start=System.currentTimeMillis();
		while((len=src.read(buf))!=-1){
			/*
			 * void write(byte[] data)
			 * 一次性将给定的字节数组中所有字节写出
			 * 
			 * void write(byte[] d,int start,int end)
			 * 将给定数组中从下标start处开始的len个字节一次性写出
			 */
			desc.write(buf,0,len);
		}
		long end=System.currentTimeMillis();
		System.out.println("复制完毕,耗时:"+(end-start)+"ms");
		src.close();
		desc.close();
	}

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

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

12. 读取文件数据

public static void main(String[] args) throws IOException {
		RandomAccessFile raf=new RandomAccessFile("raf.dat", "r");
		/*
		 * int read()
		 * 读取一个字节,并以10进制的int型返回
		 * 若返回值为-1,则表示读取到了文件末尾
		 * 
		 * 00000000 00000000 00000000 00000001
		 */
		int d=raf.read();
		System.out.println(d);
		raf.close();
	}

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

public static void main(String[] args) throws IOException {
		RandomAccessFile raf=new RandomAccessFile("raf1.dat", "rw");
		/*
		 * long raf.getFilePointer()
		 * 获取当前RAF的指针位置
		 */
		System.out.println("pos:"+raf.getFilePointer());//pos:0
		
		/*
		 * 向文件中写入一个int最大值
		 * 01111111 11111111 11111111 11111111
		 * 
		 */
		int max=Integer.MAX_VALUE;
	//	raf.write(max);//只能写二进制的低八位,可以写成下面四句
		
		raf.write(max>>>24);
		raf.write(max>>>16);
		raf.write(max>>>8);
		raf.write(max);
		System.out.println("pos:"+raf.getFilePointer());//pos:4
		

		raf.writeInt(max);//这句话顶上面四句
		System.out.println("pos:"+raf.getFilePointer());//pos:8
		raf.writeLong(1234L);
		System.out.println("pos:"+raf.getFilePointer());//pos:16
		raf.writeDouble(123.123);
		System.out.println("pos:"+raf.getFilePointer());//pos:24
		/*
		 * void seek(long pos)
		 * 移动指针到指定位置
		 */
		raf.seek(0);
		System.out.println("pos:"+raf.getFilePointer());//pos:0
		int i=raf.readInt();
		System.out.println(i);//2147483647
		raf.seek(8);
		long l=raf.readLong();
		System.out.println(l);//1234
		System.out.println("pos:"+raf.getFilePointer());//pos:16
		double d=raf.readDouble();
		System.out.println(d);//123.123
		System.out.println("pos:"+raf.getFilePointer());//pos:24
		
		raf.seek(0);
		l=raf.readLong();//把两个int当成一个long输出,解码错误
		System.out.println(l);//9223372034707292159
		
		raf.close();
		

	}

14. 实现方法,来删除给定的文件或目录

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();
	}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值