java之file与流

 file

  file的一些方法

  获取文件长度(获取的是文件的字节数)

private static void fun1() {
		File file1=new File("/Users/lanou/Desktop/Test/haha1.txt");
		//mac下 一个英文字符1个字节 中文字符3个字节
		long num=file1.length();
		System.out.println(num);
	}

  删除一个文件夹(如果删除文件夹 文件夹中不能有东西)

public void deleteFile(File file) {
		File[] files = file.listFiles();
		for (File file2 : files) {
			if (file2.isDirectory()) {
				file2.delete();
			}else {
				deleteFile(file2);			
			}
		}
		file.delete();
	}

 文件过滤器(FileFileter)

    1.实现接口及方法

   2.调用listFiles(FileFilter filter)方法

   3.打印查看测试结果

private static void fun1() {
		File file = new File("/Users/lanou/Desktop/Test");
		File[] files = file.listFiles(new MyFilter());
		for (File subFile : files) {
			System.out.println(subFile);
		}
	}
class MyFilter implements FileFilter{
	/*
	 * 该方法返回true会把所有文件装到数组中
	 * 返回false不会装进数组里
	 * 该方法的参数是文件夹中所有的文件路径
	 * 作用:过滤掉你不需要的文件
	 */
	@Override
	public boolean accept(File pathname) {
		//获取所有文件路径(绝对的)
		//System.out.println(pathname);
		
		//过滤文件夹(是文件夹就返回false)
		if (pathname.isDirectory()) {
			return false;
		}
		return true;
	}	
}

  文件过滤器(FileNameFileter)

private static void fun2() {
		File file = new File("/Users/lanou/Desktop/Test");
		File[] files = file.listFiles(new MyFilenameFilter());
		for (File subfile : files) {
			System.out.println(subfile);
		}
	}
class MyFilenameFilter implements FilenameFilter{

	@Override
	public boolean accept(File dir, String name) {
		//dir 是文件夹父路径的文件
		//name 是子路径(文件名字) 是个字符串
		File file =new File(dir, name);	
		System.out.println(dir);
		System.out.println(name);
		return false;
	}
	
}

 流

  (字节流 以字节为单位进行数据的传输)

   以参照物来衡量是输出还是输入

   流的参照物(程序)

   输出流

   程序-->文件(写文件使用输出流)

   输入流

   文件-->程序(读文件使用输入流) 

   OutputSteam 字节输出流

   InputSteam 字节输入流

   以上两个抽象类是所有字节流的父类


  OutputSteam 字节输出流

private static void fun1() throws FileNotFoundException, IOException {
		//创建File(给输出流绑定一个输出文件)
		//给出路径 可以没有该文件(系统会帮你创建出来)
		File file=new File("/Users/lanou/Desktop/Test/hh.txt");
		//创建文件字节输出流
		FileOutputStream fos=new FileOutputStream(file);
		//写文件
		//注意:流这块全是抛的IOException
		//传入int值的方法 是按ASCII码输入
		//一次写入一个字节
		fos.write(65);
		//创建一个字节数组
		byte[] b= {66,67,68,69};
		fos.write(b);
		//直接写字符串
		//字符串转字节数组 getBytes();
		//字节数组转字符串 字符串的构造方法
		fos.write("haha1".getBytes());	
		fos.write(b, 1, 2);//1表示偏移量,2表示长度
		//关闭资源
		fos.close();
	}

  InputSteam 字节输出流

private static void fun1() throws IOException {
		File file=new File("/Users/lanou/Desktop/Test/hh.txt");
		FileInputStream fis=new FileInputStream(file);
		//读文件
		int num = fis.read();
		System.out.println((char)num);
		num = fis.read();
		System.out.println((char)num);
		num = fis.read();
		System.out.println((char)num);
		num = fis.read();
		System.out.println((char)num);
		num = fis.read();
		System.out.println((char)num);
		num = fis.read();
		//如果读取到文件没有字符了 返回-1
		System.out.println(num);
		num = fis.read();
		System.out.println(num);			
		//关闭资源
		fis.close();
	}

  循环读取(一次只能读一个字节)

private static void fun2(FileInputStream fis) throws IOException {
		File file=new File("/Users/lanou/Desktop/Test/hh.txt");
		FileInputStream fis=new FileInputStream(file);
		int num=0;
		while ((num=fis.read())!=-1) {
			System.out.println((char)num);
		}
		fis.close();
	}

  一次多读几个字节

private static void fun3(FileInputStream fis) throws IOException {
		File file=new File("/Users/lanou/Desktop/Test/hh.txt");
		FileInputStream fis=new FileInputStream(file);
		//在hh.txt文件中输入ABCDE
		//一次多读几个字节
		//创建一个空的字节数组 长度2
		//把文件中字节读进这个数组中
		//一次读俩 提高效率(一般一次1kb=1024)
		byte[] b =new byte[2];	
		//返回是读取的有效位数
		int len = fis.read(b);
		System.out.println(Arrays.toString(b));// AB,打印出A和B的ASCII码值
		System.out.println(len);// 2,指向2个字节
		len = fis.read(b);
		System.out.println(Arrays.toString(b));// CD
		System.out.println(len);// 2	
		len = fis.read(b);
		System.out.println(Arrays.toString(b));// ED
		System.out.println(len);// 1	
		len = fis.read(b);
		System.out.println(Arrays.toString(b));// ED
		System.out.println(len);// -1
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值