------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
IO流(三)
Ⅻ 复制单级文件夹
<pre name="code" class="java">public class StreamTest4 {
public static void main(String[] args) throws IOException {
// 封装C:\\course文件夹为一个File对象
File srcFile = new File("C:\\course");
// 封装E:\\course文件夹为一个File对象,判断其是否存在,如果不存在就创建一个文件夹
File destFile = new File("E:\\course") ;
// 判断其是否存在
if(!destFile.exists()){
destFile.mkdir() ;
}
copyFile(srcFile , destFile) ;
}
private static void copyFile(File srcFile, File destFile) throws IOException {
// 获取C:\\course对应的File的所有的文件的一个File数组
File[] files = srcFile.listFiles() ;
// 遍历数组
for(File file : files){
// 获取当前遍历的文件对应的名称
String srcFileName = file.getName() ;
// 构建一个新的File对象
File destResultFile = new File(destFile , srcFileName) ;
// 复制文件
copy(file , destResultFile) ;
}
}
private static void copy(File file, File destResultFile) throws IOException {
// 创建高效字节输入流和字节输出流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)) ;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destResultFile)) ;
// 一次读取一个字节数组复制文件
byte[] bytes = new byte[1024] ;
int len = 0 ;
while((len = bis.read(bytes)) != -1){
bos.write(bytes, 0, len) ;
}
// 释放资源
bos.close() ;
bis.close() ;
}
}
XIII 复制指定目录下指定后缀名的文件并修改名称
public class StreamTest5 {
public static void main(String[] args) throws IOException {
// 封装C:\\demo路径为一个File对象
File srcFile = new File("C:\\demo") ;
// 封装E:\\demo路劲为一个File对象,
File destFile = new File("E:\\demo") ;
// 然后判断是否存在,如果不存在就创建一个文件夹
if(!destFile.exists()){
destFile.mkdir() ;
}
// 获取a中的所有的以.java结尾的文件数组
File[] files = srcFile.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return new File(dir , name).isFile() && name.endsWith(".java");
}
}) ;
// 遍历数组进行复制文件
for(File file : files) {
// 获取当前遍历的文件对应的名称
String srcFileName = file.getName() ;
// 构建一个目标文件
File destResultFile = new File(destFile , srcFileName) ;
// 复制
copy(file , destResultFile) ;
}
// 重命名
// 获取b中对应的文件的File数组
File[] resultFiles = destFile.listFiles() ;
// 遍历
for(File file : resultFiles){
// 获取当前遍历的文件对应的名称
String currentFileName = file.getName() ;
currentFileName = currentFileName.replace("java", "jad") ;
// 构建目标文件
File resultFile = new File(destFile , currentFileName) ;
// 重命名
file.renameTo(resultFile) ;
}
}
XIV 键盘录入3个学生信息(姓名,语文成绩(chineseScore),数学成绩(mathScore),英语成绩(englishScore)),按照总分从高到低存入文本文件
public class StreamTest5 {
public static void main(String[] args) throws IOException {
// 封装C:\\demo路径为一个File对象
File srcFile = new File("C:\\demo") ;
// 封装E:\\demo路劲为一个File对象,
File destFile = new File("E:\\demo") ;
// 然后判断是否存在,如果不存在就创建一个文件夹
if(!destFile.exists()){
destFile.mkdir() ;
}
// 获取a中的所有的以.java结尾的文件数组
File[] files = srcFile.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return new File(dir , name).isFile() && name.endsWith(".java");
}
}) ;
// 遍历数组进行复制文件
for(File file : files) {
// 获取当前遍历的文件对应的名称
String srcFileName = file.getName() ;
// 构建一个目标文件
File destResultFile = new File(destFile , srcFileName) ;
// 复制
copy(file , destResultFile) ;
}
// 重命名
// 获取b中对应的文件的File数组
File[] resultFiles = destFile.listFiles() ;
// 遍历
for(File file : resultFiles){
// 获取当前遍历的文件对应的名称
String currentFileName = file.getName() ;
currentFileName = currentFileName.replace("java", "jad") ;
// 构建目标文件
File resultFile = new File(destFile , currentFileName) ;
// 重命名
file.renameTo(resultFile) ;
}
}
private static void copy(File file, File destResultFile) throws IOException {
// 创建高效字节输入流和字节输出流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)) ;
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destResultFile)) ;
// 频繁的读写操作
// 一次读取一个字节数组复制文件
byte[] bytes = new byte[1024] ;
int len = 0 ;
while((len = bis.read(bytes)) != -1){
bos.write(bytes, 0, len) ;
}
// 释放资源
bos.close() ;
bis.close() ;
}
}
XV 使用Reader自定义类,模拟BufferedReader的readLine()功能并测试
LineNumberReader的概述和使用
(不作为重点)
9.数据输入输出流流
数据输入输出流的概述和使用
public class DataStreamDemo {
public static void main(String[] args) throws IOException {
read() ;
}
private static void read() throws IOException {
DataInputStream dis = new DataInputStream(new FileInputStream("dataStream.txt")) ;
// 读取数据
int a = dis.readInt() ;
float f = dis.readFloat() ;
String s = dis.readUTF() ;
// 释放资源
dis.close() ;
// 输出
System.out.println(a);
System.out.println(f);
System.out.println(s);
}
private static void write() throws IOException {
DataOutputStream dos = new DataOutputStream(new FileOutputStream("dataStream.txt")) ;
// 写数据
dos.writeInt(100) ;
dos.writeFloat(23.45f) ;
dos.writeUTF("中国") ;
// 释放资源
dos.close() ;
}
}
10.打印流
Ⅰ 字节流打印流(PrintStream)
字符打印流(PrintWriter)
打印流的特点
只能操作目的地,不能操作数据源。
可以操作任意类型的数据。
如果启动了自动刷新,能够自动刷新。
可以操作文件的流
ⅡPrintWriter实现自动刷新和换行
public class PrintWriterDemo2 {
public static void main(String[] args) throws IOException {
// 创建对象
//PrintWriter pw = new PrintWriter("autoFlush.txt") ;
// 启用自动刷新
PrintWriter pw = new PrintWriter(new FileWriter("autoFlush.txt"), true) ;
pw.println(true) ;
pw.println(100) ;
pw.println("中国") ;
// 释放资源
pw.close() ;
}
}
Ⅲ打印流复制文本文件
11标准输入输出流
Ⅰ概述
System类中的字段:in,out。
它们各代表了系统标准的输入和输出设备。
默认输入设备是键盘,输出设备是显示器。
System.in的类型是InputStream.
System.out的类型是PrintStream是OutputStream的孙子类FilterOutputStream 的子类.
Ⅱ三种方式实现键盘录入
a: Scanner
Scanner sc = new Scanner(System.in) ;
b: main方法
java HelloWorld hello world java
c: 使用BufferedReader通过转换流对System.in这个字节流进行转换
12 序列化流和反序列化流的概述和使用
Ⅰ序列化流的概述
所谓的序列化就是把对象通过流的方式存储到文件中.
反序列化就是把文件中存储的对象以流的方式还原成对象
ObjectInputStream和ObjectOutputStream
我们使用序列化流在写对象时候,要求这个元素必须实现Serializable
如果以后看到某一个接口没有方法,那么这样的接口就被称之为标记接口
public class DataStreamDemo {
public static void main(String[] args) throws IOException {
read() ;
}
private static void read() throws IOException {
DataInputStream dis = new DataInputStream(new FileInputStream("dataStream.txt")) ;
// 读取数据
int a = dis.readInt() ;
float f = dis.readFloat() ;
String s = dis.readUTF() ;
// 释放资源
dis.close() ;
// 输出
System.out.println(a);
System.out.println(f);
System.out.println(s);
Ⅱ解决序列化时候的黄色警告线问题 使用transient关键字声明不需要序列化的成员变量
13 Properties集合
Ⅰ Properties 类表示了一个持久的属性集。
Properties 可保存在流中或从流中加载。
属性列表中每个键及其对应值都是一个字符串。
public class PropertiesDemo {
public static void main(String[] args) {
// 创建对象
Properties prop = new Properties() ;
// 使用put方法添加元素
prop.put("张三", "20") ;
prop.put("李四", "23") ;
// 遍历
Set<Object> keySet = prop.keySet() ;
// 遍历
for(Object obj : keySet){
// 通过键获取值
Object value = prop.get(obj) ;
// 输出
System.out.println(obj + "----" + value);
}
}
}
Ⅱ Properties的特殊功能
public Object setProperty(String key,String value)
public String getProperty(String key)
public Set<String> stringPropertyNames()
public class PropertiesDemo2 {
public static void main(String[] args) {
// 创建对象
Properties prop = new Properties() ;
// 添加元素
prop.setProperty("乔峰", "阿珠") ;
prop.setProperty("许仙", "白娘子") ;
Set<String> names = prop.stringPropertyNames() ;
for(String name : names){
// 获取值
String value = prop.getProperty(name) ;
// 输出
System.out.println(name + "----" + value);
}
}
}
Ⅲ Properties的load()和store()功能
public void load(Reader reader)
public void store(Writer writer,String comments)
public class PropertiesDemo3 {
public static void main(String[] args) throws IOException {
// store();
load() ;
}
private static void load() throws FileNotFoundException, IOException {
// 创建Properties对象
Properties prop = new Properties() ;
// 调方法加载数据
prop.load(new FileReader("names.properties")) ;
// 遍历
Set<String> names = prop.stringPropertyNames() ;
for(String name : names){
// 获取值
String value = prop.getProperty(name) ;
// 输出
System.out.println(name + "===" + value);
}
}
public static void store() throws IOException {
// 创建Properties对象
Properties prop = new Properties() ;
// 添加数据
prop.setProperty("邓超", "孙俪") ;
prop.setProperty("黄晓明", "杨颖") ;
prop.setProperty("李晨", "范冰冰") ;
prop.store(new FileWriter("names.properties"), "NAMES") ;
}
}
Ⅳ 判断文件中是否有指定的键如果有就修改值的
我有一个文本文件,我知道数据是键值对形式的,但是不知道内容是什么。
请写一个程序判断是否有“lisi”这样的键存在,如果有就改变其值为”100”
public class PropertiesTest {
public static void main(String[] args) throws IOException {
// 创建一个Properties对象
Properties prop = new Properties() ;
// 通过load方法加载数据到Properties集合
prop.load(new FileReader("prop.properties")) ;
// 获取所有键的Set集合
Set<String> names = prop.stringPropertyNames() ;
// 判断这个集合中是否存在"lisi"这个键
if(names.contains("lisi")){
prop.setProperty("lisi", "100") ;
}
// 调用store方法把数据存储到文件中
prop.store(new FileWriter("prop.properties"), null) ;
}
}