Java基础练习 — IO流(高级)

一、File

文件和目录路径名的抽象表达式,File类的实例是不可变的。

1.1 构造方法

  1. File(File parent, String child) 根据指定的父路径对象和文件名创建file对象。
    代码示例:
File parent = new File("d:\\a"); //父路径是文件夹a
File f = new File(parent, "b.txt"); //创建一个新文件所在路径对象,指向父路径下的b.txt
  1. File(String parent, String child)根据指定的父路径和文件名创建File对象。与上一个构造方法的区别在于,这个方法是直接指定了字符串类型的父路径,没有创建父路径对象
    代码示例:
File f = new File("e:\\a", "b.txt"); //创建一个新文件所在路径对象,指向父路径下的b.txt
File f = new File("e:\\", "a\\b.txt"); //两种方法效果一致。
  1. File(String name)将指定路径转换成一个File对象。(File对象只是指向文件路径而已,并不创建实际文件)

1.2 成员方法

绝对路径:固定不可改变的路径,以盘符开头。
相对路径:相对某个参照物,不能以盘符开头。在eclipse中相对路径对应于当前项目的根目录。

1.2.1 创建功能

  1. boolean createNewFile()当指定文件不存在时创建文件并返回true,否则返回false
  2. boolean mkdir()当指定文件夹不存在时创建文件夹并返回true,否则返回false
  3. boolean mkdirs()创建指定文件夹,当指定文件夹所在的目录不存在时,顺道一块创建了。
    代码示例:
FIle f = new File("c\\d\\e"); //创建一个新文件夹所在路径对象,指向父路径下的e
System.out.println(f.mkdirs());

1.2.2 删除功能

  1. boolean delete()删除一个文件夹,这个文件夹下不能有子文件或子文件夹

1.2.3 判断功能

  1. boolean exists()判断文件或文件夹是否存在,若果存在返回true,如果不存在返回false
  2. boolean isAbsolute()判断File对象指向的路径是否是绝对路径,若果存在返回true,如果不存在返回false
  3. boolean isDirectory()判断File对象指向的路径是否是文件夹,若果存在返回true,如果不存在返回false
  4. boolean isFile()判断File对象指向的路径是否是文件,若果存在返回true,如果不存在返回false
  5. boolean isHidden()判断File对象指向的路径是否有隐藏属性,若果存在返回true,如果不存在返回false

1.2.4 获取功能

  1. File getAbsolute()File对象的形式返回其所指向的绝对路径
  2. String getAbsolute()String的形式返回File对象的绝对路径
  3. String getParent()获取父路径。
  4. File getParentFile()获取父路径对象
    代码示例
File parent = new File("b"); //创建父路径对象,父路径为b文件夹
File f = new File(parent, "c.txt"); //创建一个新文件所在路径对象,指向父路径下的c.txt
if( !parent.exists()){ //判断父路径是否存在,若不存在则进行下一步
	parent.mkdirs(); //创建父路径目录
}
System.out.println(f.createFile()); //创建文件
System.out.println(f.getParent()); //获取父路径
System.out.println(f.getParentFile()); //获取父路径File对象

  1. String getName()获取文件和文件夹的名称。
  2. String getPath()返回创建File对象时给的路径。
  3. long lastModified()毫秒形式返回最后修改的时间。

1.2.5 修改名字的方法

  1. boolean renameTo(File dest)将当前File对象的路径修改为传入的File对象所指向的路径。修改成功返回true,修改失败返回false
    代码示例:
File f = new File("abc.txt");
File f2 = new File("cba.txt");
System.out.println(f.renameTo(f2)); //修改的文件路径不能存在,即不能同名,如果存在同名,则修改失败。

1.2.6 其他方法

  1. String[] list()返回当前路径下所有的文件和文件夹名称
  2. File[] listFiles()返回的是路径名的数组
  3. static File[] listRoots()返回所有的盘符,列出可用的文件系统根目录。

案例演示

public static void main(String[] args){
	File f = new File("e:\\FileDemo");
	method01(f); 
	method02(f);
}

//输出指定目录下所有的".java"文件(分含子目录和不含子目录,这里是含子目录的)
public static void method01(File file){ 
	if(file.isDirectory()){ //是不是目录,是-下一步
	File[] files = file.listFiles(); //返回该目录下的路径名数组
		for(File f : files){ //增强for循环对路径名数组进行遍历
			if(f.isFile()){ //对遍历的每一个元素判断是不是文件,是-下一步
				if(f.getName().endsWith(".java")){ 判断文件名是不是以.java结尾,是-下一步
					System.out.println(f.getName()); //输出名字
					}
			}else{ //不是
				method(f); //递归方法,重新遍历
			}
		}
	}
}

//删除指定的目录(包含子目录),如果要删除一个目录,则需要先删除这个目录下的所有文件和目录
public static void method02(File file){ 
	if(file.isDirectory()){ //是不是目录,是-下一步
	File[] files = file.listFiles(); //返回该目录下的路径名数组
		for(File f : files){ //增强for循环对路径名数组进行遍历
			if(f.isFile()){ //对遍历的每一个元素判断是不是文件,是-下一步
				if(f.isFile()){ 判断文件名是不是以.java结尾,是-下一步
					System.out.println(f.getName()); //输出名字
					f.delete(); //删除这个文件
					}
			}else(f.isDirectory()){ //不是
				method(f); //递归方法,重新遍历
			}
		}
		System.out.println(file.getName()); //循环结束后输出名字
		file.delete(); //循环结束后删除自己
	}
}

1.2.7 IO流分类

IO流分类

案例1 — 使用字符流复制文本文件

//1. 创建字符输入流对象
FileReader fr = new FileReader("IODemo.java"); //源文件

//2. 创建字符输出流对象
FileWriter fw = new FileWriter("e:\\demo.java"); //目的地

//3-1. 一次读写一个字符
int ch;
while((ch = fr.read()) != -1){
	fw.write(ch);
	fw.flush();
}

//释放资源
fw.close();
fr.close();

//3-2. 一次读写一个字符数组
int len; //存一次读到的字符个数
char[] chs = new char[1024]; //每一次读1024个长度的字符(有可能读不到1024个),并返回char[]
while((len = fr.read(chs)) ! = -1){ //返回每次真实读到的字符个数,判断是否为-1,-1表示没有字符可读了
	fw.write(chs, 0, len); //写入chs中的元素,有几个写几个,len为有效元素的个数,即真实读到的元素个数
	fw.flush();
}

//释放资源
fw.close();
fr.close();

案例2 — 使用字节流复制图片(也可复制文本文件)

//创建字节输入流对象
FileInputStream fis = new FileInputStream("photo.jpg");

//创建字节输出流对象
FileOutputStream fos = new FileOutputStream("e:\\photo.jpg");

//一次读写一个字节数组
int len;
byte[] bys = new byte[1024];
while((len = fis.read(chs)) ! = -1){
	fos.write(bys, 0, len); //直接存储到文件中,不需要flush();
}

//释放资源
fos.close();
fis.close();
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值