Day19(IO流)学习记录(File类 字节流&字符流)

大纲

Day19(IO流)学习目标

【学习目标】理解、了解、应用、记忆

通过今天的学习,参训学员能够:(解释的时候说出二级目标的掌握程度)

  1. 【应用】File类
  1. 【应用】能够独立测试File类的构造方法
  2. 【应用】能够独立测试File类的创建和删除功能
  3. 【应用】能够独立测试File类的判断功能
  4. 【应用】能够独立测试File类的获取功能和修改名字功能
  5. 【应用】能够完成打印指定目录下所有的java文件名(包含子目录)的案例
  6. 【应用】能够独立删除指定的目录(包含子目录)案例
  1. 【理解】字节流&字符流
  1. 【应用】能够阐述IO流的分类
  2. 【应用】能够利用字符流复制文本文件
  3. 【应用】能够利用字节流拷贝图片

收获

这一章相当于讲对File类的增删改查

一:File类

1File类创建和删除功能

boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false

boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false  

boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false

boolean delete():删除文件或者删除单级文件夹

package com.itheima_01;

import java.io.File;
import java.io.IOException;

/*
 * 	创建功能
 * 		boolean createNewFile()  
 * 		boolean mkdir()  
 * 		boolean mkdirs()  
 * 	删除功能
 * 		boolean delete() 
 * 
 *  绝对路径:固定不可改变的路径,以盘符开头
 *  相对路径:相对某个参照物,不能以盘符开头
 *  		在eclipse中相对路径相对应当前项目的根目录
 *  
 *  
 *  注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹

 */
public class FileDemo2 {
	public static void main(String[] args) throws IOException {
		  File f = new File("d:\\a\\b.txt");//绝对路径
		  File f2 = new File("a.txt");//相对路径
		
		 //boolean createNewFile() : 当指定文件不存在时创建文件并返回true,否则返回false
		 System.out.println(f2.createNewFile());
		
		 
		//boolean mkdir()   : 当指定文件夹不存在时创建文件夹并返回true,否则返回false
		File f3 = new File("b");
		System.out.println(f3.mkdir());
		
		//boolean mkdirs() : 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了
		File f4 = new File("c\\d\\e");
		System.out.println(f4.mkdir());
		System.out.println(f4.mkdirs());
		
		File f5 = new File("c.txt");
		System.out.println(f5.mkdir());
		
		//boolean delete() :当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false
		System.out.println(f2.delete());
		System.out.println(f3.delete());

		File f6 = new File("c");
		System.out.println(f6.delete());
		
	}
}

2File类的判断功能

boolean exists():判断指定路径的文件或文件夹是否存在

boolean isAbsolute():判断当前路路径是否是绝对路径

boolean isDirectory():判断当前的目录是否存在

boolean isFile():判断当前路径是否是一个文件

boolean isHidden():判断当前路径是否是隐藏文件

package com.itheima_01;
import java.io.File;
import java.io.IOException;

/*
 *	判断功能
 * 		boolean exists()  
 * 		boolean isAbsolute()  
 * 		boolean isDirectory() 
 		boolean isFile()  
 		boolean isHidden() 
 */
public class FileDemo3 {
	public static void main(String[] args) throws IOException {
		//method();
		//method2();
		//method3();
		
		method4();
		
		
		
	}

	private static void method4() {
		File f = new File("d:\\a\\b.txt");
		//boolean isHidden() :判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false
		
		System.out.println(f.isHidden());
	}

	private static void method3() {
		File f = new File("a.txt");
		File f2 = new File("b");
		//boolean isDirectory() :判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false
		//boolean isFile()  : 判断File对象指向的路径是否是文件,如果是则返回true,否则返回false
		
		//System.out.println(f.isDirectory());
		//System.out.println(f2.isDirectory());
		
		System.out.println(f.isFile());
		System.out.println(f2.isFile());
	}

	private static void method2() {
		//File f = new File("a.txt");
		File f2 = new File("d:\\a\b.txt");
		
		//boolean isAbsolute() :判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
		System.out.println(f2.isAbsolute());
	}

	private static void method() {
		File f = new File("a.txt");
		//f.createNewFile();
		
		//boolean exists() : 判断文件或者文件夹是否存在,如果存在则返回true,否则返回false
		System.out.println(f.exists());
	}
}

3File类的获取功能和修改名字功能

  File getAbsoluteFile():获取文件的绝对路径,返回File对象

  String getAbsolutePath():获取文件的绝对路径,返回路径的字符串

  String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径

  File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径

  String getName():获取文件或文件夹的名称

  String getPath():获取File对象中封装的路径

  long lastModified():以毫秒值返回最后修改时间

  long length():返回文件的字节数

  boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径

4File类两个案例

输出指定目录下所有的java文件名(包含子目录)

package com.itheima_02;

import java.io.File;

/*
 * 需求:输出指定目录下所有的java文件名(包含子目录)
 */
public class RecurrenceTest {
	public static void main(String[] args) {
		File f = new File("src");
		//File f = new File("src\\com\\itheima_01\\RecurrenceDemo.java");
		method(f);
	}
	
	public static void method(File file) {
		if(file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				//判断是否是文件对象
				if(f.isFile()) {
					if(f.getName().endsWith(".java")) {
						System.out.println(f.getName());
					}
				}
				else if(f.isDirectory()){
					//是一个目录对象
					method(f);
				}
			}
		}
	}
	
	
	//输出指定目录下的所有java文件名(不包含子目录)
	public static void method2(File file) {
		if(file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				//判断是否是文件对象
				if(f.isFile()) {
					if(f.getName().endsWith(".java")) {
						System.out.println(f.getName());
					}
				}
			}
		}
	}
	
}

删除指定的目录(包含子目录)

package com.itheima_02;

import java.io.File;

/*
 * 需求:删除指定的目录(包含子目录)
 * 
 * 注意:如果要删除一个目录,则需要先删除这个目录下的所有子文件和子目录
 * 
 */
public class RecurrenceTest2 {
	public static void main(String[] args) {
		File f = new File("d:\\a");
		method(f);
	}
	
	//删除指定目录下所有文件和目录
	public static void method(File file) {
		if(file.isDirectory()) {
			//干掉自己所有的子文件和子目录
			//获取所有的子文件和子目录
			File[] files = file.listFiles();
			for (File f : files) {
				if(f.isFile()) {
					//直接干掉他
					System.out.println(f.getName());
					f.delete();
				}
				else if(f.isDirectory()) {
					//继续查看是否还有文件和子目录
					method(f);
				}
			}
			
			//干掉自己
			System.out.println(file.getName());
			file.delete();
		}
	}
}

字符流与字节流

1 IO流分类:

    流向

      输入流 读取数据 FileReader Reader

      输出流 写出数据 FileWriter Writer

     数据类型

       字节流

         字节输入流   读取数据 InputStream

       字节输出流   写出数据 OutputStream

    字符流

        字符输入流  读取数据 Reader

             字符输出流  写出数据 Writer

2利用字符流复制文本文件

package com.itheima_02;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 使用字符流复制文本文件
 * 
 * 数据源		IODemo.java
 * 目的地		d:\\IODemo.java

 * 	
 */
public class FileCopyDemo {
	public static void main(String[] args) throws IOException  {
		//创建字符输入流对象
		FileReader fr = new FileReader("IODemo.java");
		//创建字符输出流对象
		FileWriter fw = new FileWriter("d:\\IODemo.java");
		
		//一次读写一个字符
		
		/*int ch;
		while((ch = fr.read()) != -1) {
			fw.write(ch);
			fw.flush();
		}*/
		
		//一次读写一个字符数组
		int len;//用于存储读到的字符个数
		char[] chs = new char[1024];
		while((len = fr.read(chs)) != -1) {
			fw.write(chs,0,len);
			fw.flush();
		}
		
		//释放资源
		fw.close();
		fr.close();
	}
}

3​​​​​​​利用字节流复制文本文件

package com.itheima_03;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 使用字节流复制文本文件
 * 
 * 数据源		IODemo.java
 * 目的地		d:\\a\\IODemo.java
 * 

 */
public class FileCopyDemo {
	public static void main(String[] args) throws IOException  {
		//创建字节输入流对象
		FileInputStream fis = new FileInputStream("IODemo.java");
		//创建字节输出流对象
		FileOutputStream fos = new FileOutputStream("d:\\a\\IODemo.java");
		
		//一次读写一个字节
		/*int by;
		while((by = fis.read()) != -1) {
			fos.write(by);
		}*/
		//一次读写一个字节数组
		int len;//存储读到的字节个数
		byte[] bys = new byte[1024];
		while((len = fis.read(bys)) != -1) {
			fos.write(bys,0,len);
		}
		
		
		//释放资源
		fos.close();
		fis.close();
	}
}

4​​​​​​​复制图片

字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储

而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件

package com.itheima_04;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 分别使用字符流和字节流复制图片
 * 
 * 二进制文件只能使用字节流进行复制(使用windows自带记事本打开读不懂的)
 * 文本文件的复制即可使用字符流,也可以使用字节流
 * 
 */
public class CopyImage {
	public static void main(String[] args) throws IOException  {
		//method();
		
		//创建字节输入流对象
		FileInputStream fis = new FileInputStream("传智学院.jpg");
		//创建字节输出流对象
		FileOutputStream fos = new FileOutputStream("d:\\传智学院.jpg");
		
		//一次读写一个字节数组
		int len;//用于存储读到的字节个数
		byte[] bys = new byte[1024];
		while((len = fis.read(bys)) != -1) {
			fos.write(bys,0,len);
		}
		
		//释放资源
		fos.close();
		fis.close();
	}

	private static void method() throws FileNotFoundException, IOException {
		//创建字符输入流对象
		FileReader fr = new FileReader("传智学院.jpg");
		//创建字符输出流对象
		FileWriter fw = new FileWriter("d:\\传智学院.jpg");
		
		//一次读写一个字符数组
		int len;//用于存储读到的字符个数
		char[] chs = new char[1024];
		while((len = fr.read(chs)) != -1) {
			fw.write(chs,0,len);
			fw.flush();
		}
		
		//释放资源
		fw.close();
		fr.close();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值