稳稳当当学java之文件和IO一(18)

第二十章 文件和IO一

1.作业回顾

1,编写程序,在main方法中接受5个整数,创建TreeSet类型的集合,将5个整数添加到集合中,使用foreach遍历该集合。提供一个比较器,然后对于集合中的整数进行从大到小的顺序进行排序。然后使用Iterator进行迭代。

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class Day19HomeWork {
	public static void main(String[] args) {
		TreeSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				return o2.intValue() - o1.intValue();
			}
		});
		Scanner s = new Scanner(System.in);
		for (int i = 1; i <= 5; i++) {
			System.out.println("请输入第" + i + "个整数:");
			set.add(s.nextInt());
		}
		
		for (Integer i : set) {
			System.out.println(i);
		}
		
		s.close();
	}
}

2.File类基本的方法

java.io.File类的对象代表一个文件或者目录,File类提供了对文件或目录的所有操作。

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

public class Day2002 {
	public static void main(String[] args) throws IOException {
		//file对象代表一个文件,并不是真正的在磁盘上创建文件
//		File file = new File("C:\\Users\\Czh\\Desktop\\Czh\\Java语言基础\\20第二十章 文件和IO一\\test.txt");
		File file = new File("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test.txt");
		//检查一个文件或目录是否存在
		System.out.println(file.exists());
		
		//如果文件不存在就创建并返回true,否则不创建并返回false,是真正的创建文件
		System.out.println(file.createNewFile());
		
		//获取文件或目录的名称
		System.out.println(file.getName());//test.txt
		
		//获取文件或目录的路径
		System.out.println(file.getAbsolutePath());//C:\Users\Czh\Desktop\Czh\Java语言基础\20第二十章 文件和IO一\test.txt
		
		//返回代表其父目录的文件对象
		System.out.println(file.getParentFile());
		//返回代表其父目录的文件对象
		File parent = file.getParentFile();
		System.out.println(parent.getName());//获取父目录的文件名称
		
		//获取文件的大小,以字节为单位
		System.out.println(file.length());//0
		
		//判断此对象是否代表一个文件
		System.out.println(file.isFile());//true
		
		//判断此对象是否代表一个目录
		System.out.println(file.isDirectory());//false
		
		//是否是隐藏文件
		System.out.println(file.isHidden());//false
		
		//是否可读
		System.out.println(file.canRead());//true
		
		//是否可写
		System.out.println(file.canWrite());//true
		
		//重命名文件
//		System.out.println(file.renameTo(new File("C:\\Users\\Czh\\Desktop\\Czh\\Java语言基础\\20第二十章 文件和IO一\\test1.txt")));
		
		//删除文件
		System.out.println(file.delete());
	}
}
import java.io.File;

public class Day2003 {
	public static void main(String[] args) {
		File file = new File("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test1");
		if (!file.exists()) {
			//在磁盘上创建目录
			file.mkdir();
		}
		
		//获取目录中的所有文件
		File[] files = file.listFiles();
		
		for (File f : files) {
			System.out.println(f.getAbsolutePath());
		}
	}
}

3.文件过滤

3.1根据文件类型过滤

import java.io.File;
import java.io.FilenameFilter;

public class Day2004 {
	public static void main(String[] args) {
		File file = new File("C:\\Users\\Czh\\Desktop\\Czh\\Java语言基础\\20第二十章 文件和IO一\\test1");
		if (!file.exists()) {
			//在磁盘上创建目录
			file.mkdir();
		}
		
		//获取目录中所有文件(包括目录和文件)
		File[] files = file.listFiles(new FilenameFilter(){
			
			//返回true代表接受文件,返回false代表不接受文件
			@Override
			public boolean accept(File dir, String name) {
				//dir是文件所在目录
				//只接受txt文件
				return name.endsWith(".txt");
			}	
		});
		
		for (File f : files) {
			System.out.println(f.getAbsolutePath());
		}
	}
}

3.2根据文件大小过滤

import java.io.File;
import java.io.FileFilter;

public class Day2005 {
	public static void main(String[] args) {
		File file = new File("C:\\Users\\Czh\\Desktop\\Czh\\Java语言基础\\20第二十章 文件和IO一\\test1");
		if (!file.exists()) {
			//在磁盘上创建目录
			file.mkdir();
		}
		//获取目录中所有文件(包括目录和文件)
		File[] files = file.listFiles(new FileFilter(){
			
			//返回true代表接受文件,返回false代表不接受文件	
			@Override
			public boolean accept(File f) {
				//只接受5个字节以上的文件
				return f.length() >= 5;
			}	
		});
		
		for (File f : files) {
			System.out.println(f.getAbsolutePath());
		}
	}
}

4.IO流结构体系

一个I / O流表示输入源或输出目的地。

流可以表示许多不同类型的源和目标,包括磁盘文件,设备,其他程序和内存阵列。

流支持许多不同类型的数据,包括简单字节,原始数据类型,本地化字符和对象。

有些流只传递数据; 有些流还可以操纵和转换数据。
在这里插入图片描述

5.流实现文件的读写

FileWriter 提供了关于写文件的基本操作。

5.1流实现文件的写

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

public class Day2006 {
	public static void main(String[] args) {
		FileWriter fw = null;
		
		try {
			//创建一个输出流,如果文件不存在,将会创建一个文件
			fw = new FileWriter("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test/text.txt");
			//向流中写
			fw.write("中国你好");
			//刷新流
			fw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				//关闭流
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

5.2流实现文件的读

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;

public class Day2007 {
	public static void main(String[] args) {
		FileReader fr = null;
		try {
			//创建一个输入流
			fr = new FileReader("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test/text.txt");
			//从流中读
//			System.out.println(fr.read());//读取一个字符
			
			char[] chars = new char[256];
			//将文件中的内容读到字符数组中,尝试取读chars.length个
			//返回实际读到的字符数
			int bs = fr.read(chars);
			
			char[] arr = Arrays.copyOf(chars, bs);//得到新数组
			
			String str = new String(arr);
			System.out.println(str);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fr.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
	}
}

6.流实现文件的拷贝

在这里插入图片描述

6.1 单字符拷贝

每次读写一个字符

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

public class Day2008 {
	public static void main(String[] args) {
		FileReader fr = null;
		FileWriter fw = null;
		
		try {
			//输入流,连接源文件和程序
			fr = new FileReader("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test/text.txt");
			//输出流,连接程序和目标文件
			fw = new FileWriter("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test1/text.txt");
			
			int c = 0;//保存每次读到的字符
			//read方法每次从输入流取读一个字符
			//如果read方法读到文件的末尾,那么它就返回-1
			while(-1 !=(c = fr.read())) {
				fw.write(c);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				//关闭输入流
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				//刷新流
				fw.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				//关闭输出流
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

6.2 字符数组拷贝

每次读写一个字符数组

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

public class Day2009 {
	public static void main(String[] args) {
		FileReader fr = null;
		FileWriter fw = null;
		
		try {
			//输入流,连接源文件和程序
			fr = new FileReader("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test/text.txt");
			//输出流,连接程序和目标文件
			fw = new FileWriter("C:/Users/Czh/Desktop/Czh/Java语言基础/20第二十章 文件和IO一/test1/text.txt");
			
			char[] chars = new char[4];//保存取读到的字符
			int len = 0;//保存实际取读的字符数
			//read方法尝试取读chars.length个字符,返回实际读到的字符数
			//如果读到文件的末尾,则返回-1
			while(-1 != (len = fr.read(chars))) {
				//将字符数组中的字符写入到输出流
				//第二个参数表示从字符数组的哪个索引处开始取字符
				//第三个参数表示写多少个字符
				fw.write(chars, 0, len);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				//关闭输入流
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				//刷新流
				fw.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				//关闭输出流
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

7.字节流与字符流

7.1字节流和字符流拷贝

字节流每次读写一个字节,字符流每次读写一个字符。

字节流可以读写任何文件,字符流只能读写文本文件。

字节流继承于InputStream和OutputStream,字符流继承于Reader和Writer。凡是带Stream的都是字节流,否则就是字符流。

如果要读写二进制文件,就使用字节流。 如果要读写文本文件,并且需要在程序中查看其内容,就使用字符流。

7.2 使用字节流

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

public class Day2010 {
	public static void main(String[] args) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		
		try {
			fis = new FileInputStream("C:\\Users\\Czh\\Desktop\\Czh\\Java语言基础\\20第二十章 文件和IO一\\test\\1.jpg");
			fos = new FileOutputStream("C:\\Users\\Czh\\Desktop\\Czh\\Java语言基础\\20第二十章 文件和IO一\\test1\\1.jpg");
			
			byte[] bs = new byte[256];//保存每次读到的字节
			int len = 0;//保存实际读到的字节数
			
			while(-1 != (len = fis.read(bs))) {
				fos.write(bs, 0, len);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fos.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

8.练习

1,编写程序,在E盘创建一个目录test,再创建一个子目录abc,在abc中创建一个文件test.txt,使用输出流将往test.txt中写一个字符串,然后再使用输入流,将test.txt中的文本读到程序中。
2,编写程序,在控制台输入源文件路径和目标文件路径,实现任意文件的复制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年之伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值