IO总结第一部分

IO流对象

File类

  • 文件:计算机存储的(音乐,电影)
  • 目录:Directory 计算机中的文件夹,文件夹中不能存储数据,用来保存文件的容器
  • 路径:文件和目录所在计算机的位置

java.io.File类:文件和目录以及路径,变成对象.File类的方法,操作对象

File类,具有平台无关性

File类的构造方法

URI:统一资源标识符,包含URL,包含非网址 tentent://, mailTo://,thrunder://

URL:统一资源定位符,就是所谓的互联网网络地址 协议://域名 http://www.baidu.com

  • File(String path)字符串参数必须是路径,字符串路径变成File对象
  • File(string parent,string child)parent字符串类型的父路径, child字符串子路径
    • 绝对路径:路径在计算机中具有唯一性C:\Java\jdk1.8.0_221\bin
    • 相对路径:相对路径:C:\Java\jdk1.81\bin, jdk1.8为参照路径
      • c:\java是参照路径的父路径(上一级的文件夹)唯一性
      • bin是参照路径上的子路径(下一级文件夹)可以多个
  • File(File parent, String child)parent是File类型的父路径,child字符串子路径

File类的静态成员变量

  • static String separator与系统有关的默认分隔符 \windows操作系统
  • static String pathSeparator与系统有关的路径分隔符";"一个路径结束了

File类的创建方法

  • boolean createNewFile()创建新文件,成功返回true,文件的路径和文件名在File的构造方法中
    • 如果文件存在,不会创建
  • boolean mkdirs()创建文件夹,成功返回true,如果文件存在,不会创建
public class FileDemo {

	public static void main(String[] args) throws IOException {
	method();

	}
	//创建文件
	public static void method() throws IOException {
		File file=new File("d:\\abc.txt");
		boolean b=file.createNewFile();
		System.out.println(b);
	}
	//创建文件夹
	public static void method1() {
		File file =new File("d:\\abc");
		boolean b=file.mkdir();
		System.out.println(b);
	}


}

File类的删除方法

  • boolean delete()删除文件或者文件夹
public static void method2() {
		File file =new File("d:\\abc");
		boolean b=file.delete();
		System.out.println(b);
	}

File类的判断方法

Boolean exists()判断File构造方法中的路径,是否真的存在,存在返回true

public static void method3() {
		File file =new File("d:\\abc");
		boolean b=file.exists();
		System.out.println(b);
	}

boolean isDirectory()判断File构造方法中的路径,是不是一个文件夹,是文件夹返回true

public static void method4() {
		File file =new File("d:\\abc");
		boolean b=file.isDirectory();
		System.out.println(b);
	}

boolean isFile()判断File构造方法中的路径,是不是一个文件,是文件返回true

public static void method4() {
		File file =new File("d:\\abc");
		if(file.exists())//判断文件是否存在 {
		boolean b=file.isFile();
		System.out.println(b);
		}

File类的获取

  • String getName()返回File构造方法中,路径的名字,可能是文件夹名字,也可能是文件名
  • String getPath()返回路径名的字符串形态
  • File getAbsoluteFile()返回绝对路径,返回值是File对象
  • File getParentFile()返回路径的父路径,返回值是File对象
public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		method6();
	}
	 public static void method() throws IOException {
	    	File file=new File("C:\\Users\\lj\\Desktop\\abc");
	    	boolean b=file.exists();
	    	System.out.println(b);
	    }
	 public static void method2() {
		 File file =new File("C:\\Users\\lj\\Desktop\\abc");
		 boolean b=file.isDirectory();
		 System.out.println(b);
	 }
	 public static void method3() {
		 File file=new File("C:\\Users\\lj\\Desktop\\abc");
	 String name=file.getName();
	 System.out.println(name);
	 }
	 public  static void method4() {
		 File file=new File("C:\\Users\\lj","Desktop");
		 String path=file.getPath();
		 System.out.println(path);
	 }
	 
	 /*
	  * File类获取方法,getAbsoluteFile()获取绝对路径
	  * eclipse环境,获取的绝对路径,是当前工程的路径
	  * 
	  * */
	 public static void method5() {
		 File file =new File("abc");
		 File file2=file.getAbsoluteFile();
		 System.out.println(file2);
	 }
	 
	 /*
	  * File类的获取方法,getParentFile()获取父路径的
	  * */
	 public static void method6() {
		 File file=new File("C:\\Users\\lj\\Desktop\\abc");
		 File parentFile=file.getParentFile();
		 System.out.println(parentFile);
	 }

File类的list开头的方法

  • long length()获取到文件的字节数,文件夹没有字节数
  • File[] 1istFiles()获取构造方法中路径,里面的所有文件列表(文件夹)
    • 文件夹遍历
  • static File[] listRoots()获取当前计算机中所有的根目录
	public static void main(String[] args) {
		method2();

	}
	/*
	 * File类方法,length()文件的字节数
	 */
	
   public static void method() {
	   File file =new File("D:\\eclipse\\eclipse\\configuration");
	   long length=file.length();
	   System.out.println(length);
   }
   /*
    * File类方法,listFiles()遍历文件夹
    */
   public static void method1() {
	 File file=new File("D:\\eclipse\\eclipse\\configuration");
	  File[] files=file.listFiles();
	  for(File f:files) {
		  System.out.println(f);
	  }
	  System.out.println(files.length);
   }
   /*
    * File类方法,listRoots(()静态
    */
   public static void method2() {
	   File[] files=File.listRoots();
	   for(File f:files) {
		   System.out.println(f);
	   }
   }
    

文件过滤器

需求 :目录d:/abc里面有很多文件,File类的方法listFiles()获取abc目录下的文件,只需要java文件,其他类型都不需要

  • java.io.FileFilter接口,文件过滤器接口,对获取的文件进行过滤
    • 此接口的实现类,可以传递给方法listFiles()
    • 抽象方法boolean accept(File f)自定义实现类
  • Fiile[] listFiles( FileFilter filter )传递文件过滤器的接口
public class FileListDemo03 {

	public static void main(String[] args) {
	File file =new File("d:/abc");
	//遍历abc目录,方法传递文件过滤器实现类对象
	File[] files = file.listFiles(new MyFiler());
	for(File f : files) {
	System.out.println(f);
	}
	
	}
	}
	//定义文件过滤接口的实现类
	class MyFiler implements FileFilter{
		 public boolean accept(File pathname) {
			 //判断pathnam路径表示的文件是不是.java文件
			 //文件后缀名是不是.java String类方法endswith忽略大小写
			return pathname.getName().toLowerCase().endsWith(".java");
			 
		 }
	}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fvqvm45e-1595593846972)(C:\Users\15272\Desktop\笔记\笔记照片\文件过滤器.png)]

目录遍历

在遍历一个目录的时候,如果发现还有子目录,进去自己遍历

public static void main(String[] args) {
		iteratorDir(new File("d:/abc"));
	}
	/*
	 * 目录的遍历:遍历那个目录,传递参数
	 */
public static void iteratorDir(File dir) {
	//File对象方法listFiles()目录的遍历
	File[] files=dir.listFiles();
	for(File f:files) {
		//判断f是不是目录,如果还是 继续遍历 iteratorDir()就是接收目录,遍历目录
		//在定义相同代码的方法,没有必要 ,我自己调用我自己
		if (f.isDirectory()) {
			iteratorDir(f);
		}else {
			System.out.println(f);
		}
		
		}
     }

方法递归调用

递归是一种编写代码上的一种技巧,方法的自身调用,方法自己调用自己

适合:方法的主体功能不变,但是功能在执行的时候,参数会改变

方法递归注意事项

  • 方法运行,自己调用自己秒回频繁进入栈内存
    • 内存溢出:方法进入栈内存,内存已满
    • 使用递归:一定要有方法的出口,递归不能太深入
  • 方法递归计算1+2+3+…+100
    • 方法功能不变,求和,每次就和数据是变化的
public static void main(String[] args) {
		System.out.println(getsum(18180));
	}
  public static   int getsum(int n) {
	if (n==1) 
		return 1;
	
	return n+getsum(n-1);
  }

IO流对象

l : lnput 输入
o: Output输出
流对象︰数据流,数据从一个设备流入另一个设备

例子:文档从硬盘中流入到内存中,文档从内存中,流入到硬盘中

​ 文档从硬盘中,流入到移动硬盘中

​ 可以从一台机器,流到另一台机器

一切都是字节

任何数据,在文件中的形态都是字节(文本,图片,音乐)互联网传输

IO流的分类
  • 按照数据的流向分
    • 输入流 input
    • 输出流 output
  • 按照操作的数据类型分
    • 字节流 字节流可以操作任意类型的数据
    • 字符流 字符流只能操作文本类型的数据
      • 什么是文本类型数据:使用文本工具(记事本,Notepad++)打开后,人可以直接阅读的
  • 分类的合并
    • 字节输入流
      • 顶层的抽象基类:java.io.IutputStream
    • 字节输出流
      • 顶层的抽象基类:java.io.OutputStream
    • 字符输入流
      • 顶层的抽象基类:java.io.Reader
    • 字符输出流
      • 顶层的抽象基类:java.io.Witer
字节输出流

可以操作任意类型的数据,从Java的程序中.输出Output,又称为写入

OutputStream类的方法:都是写入数据的方法write

  • void write(int b) 写入单个字节
  • void write(byte[] b)写入字节数组
  • void write(byte[] b int off,int len)写入字节数组的一部分,开始索引,写入个数
  • close()关闭此流,释放资源
OutputStream类的子类

IO流对象的命名非常有可读性,前缀+后缀

前缀:这个流能干啥

后缀:这个流属于哪个分类

子类FileOutputStream:

  • 构造方法
    • FileOutputStream(String name)传递字符串的文件名(数据目的)
    • FileOutputStream(File file)
/*
 * io流写入文件的数据
 * 字节输出流类FileOutputStream
 * 流对象的使用公共步骤
 * 1创建流对象
        2调用流对象的方法,读取,写
            3    释放资源
 */
public class FileOutputStreamDemo {

	public static void main(String[] args) throws  IOException{
		method();
	}
	/*
	 * FileOutputStream写入当个字节
	 */
	public static void method() throws  IOException{
		//创建流对象,构造方法绑定数据目的
		FileOutputStream fos=new FileOutputStream("D:/1.txt");
	     //流对象的方法write写入数据
	     fos.write(100);
        //释放资源
	     fos.close();
	}
/*
	 * FileOutputStream写入字节数组
	 */
	  
	public static void method2() throws  IOException{
		//创建流对象,构造方法绑定数据目的
	FileOutputStream fos=new FileOutputStream("D:/1.txt"); 
	//创建字节数组
	byte[] butes="asdasda".getBytes();
	//字节流写入字节数组
	fos.write(butes);
	//写入字节数组的一部分
	//开始索引,写入个数
	fos.write(butes,3,2);
	fos.close();
	}

IO流对象,write方法,没有实现写入的功能,调用操作系统的功能,实现的写入,释放操作系统的资源

文件的追加和续写
  • FileOurputStream(String name,boolean append)第二个参数是ture,追加写入
    /*
	 * FileOutputStream追加写入
	 */
	public static void method3() throws  IOException{
		//创建流对象,构造方法绑定数据目的
	FileOutputStream fos=new FileOutputStream("D:/1.txt",true); 
	//字节流写入字节数组
	fos.write(111);
	//写入字节数组的一部分
	//开始索引,写入个数
	fos.close();
	}
	
  • 换行写需要使用换行符\r\n
	/*
	 * FileOutputStream换行写
	 * 上一行末尾下一行也行
	 * \r\n
	 */
	public static void method3() throws  IOException{
		//创建流对象,构造方法绑定数据目的
	FileOutputStream fos=new FileOutputStream("D:/1.txt");
	//字节流写入字节数组
	fos.write("abc\n".getBytes());
	fos.write("dfg".getBytes());
	fos.close();
	}
	
IO流的异常处理
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * IO流对象的异常处理:标准写法
 * 资源释放,写在finally无论文件是否写入成功,资源必须释放
 */
public class FileOutputStreamDemo02 {

	public static void main(String[] args) {
		FileOutputStream fos=null;
		try {
			 fos=new FileOutputStream("a.txt");
		fos.write(97);
		
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//fos创建失败,导致空指针异常,判断
			if(fos!=null)
			try {
				fos.close();
			} catch (IOException e2) {
				e2.printStackTrace();
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值