1102javaIO流

IO流简介

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。


IO 流的分类

  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

文件操作File 类

创建目录和文件

  1. public boolean mkdir() 创建此抽象路径名指定的目录
  2. public boolean createNewFile() 创建一个文件
package com.java1234.chap10.yun2;

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

import javax.print.attribute.standard.MediaName;

public class Demo1 {

	public static void main(String[] args) throws IOException {
		File file=new File("d://java创建目录");
		boolean b=file.mkdir();	//创建虚拟目录
		if (b) {
			System.out.println("目录创建成功");
			file=new File("d://java创建目录//java创建的文件.txt");
			boolean b2=file.createNewFile();	//创建文件
			if (b2) {
				System.out.println("文件创建成功");
			} else {
				System.out.println("文件创建失败");
			}
		}
		else {
			System.out.println("目录创建失败");
		}	
	}
}

删除文件或目录

  1. public boolean delete()删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除
  2. public boolean exists()测试此抽象路径名表示的文件或目录是否存在
package com.java1234.chap10.yun2;

import java.io.File;
import java.io.IOException;
import java.text.FieldPosition;

import javax.print.attribute.standard.MediaName;

public class Demo2 {

	public static void main(String[] args) throws IOException {
		File file=new File("d://java创建目录//java创建的文件.txt");	//把.txt也写上
		if (file.exists()) {	//文件存在
			boolean b=file.delete();	
			if (b) {
				System.out.println("删除文件成功");
			} else {
				System.out.println("删除文件失败");
			}
		}
		else {
			System.out.println("文件不存在");
		}
		file=new File("d://java创建目录");
				if (file.exists()) {	//目录存在
					boolean b=file.delete();	
					if (b) {
						System.out.println("删除目录成功");
					} else {
						System.out.println("删除目录失败");
					}
				} 
	}
}

遍历目录

  1. public File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
package com.java1234.chap10.yun2;

import java.io.File;

public class Demo3 {
	public static void main(String[] args) {
		File file=new File("D:\\毕业设计");
		File files[]=file.listFiles();	//遍历目录
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}
	
}

测试此路径是否为目录

  1. public boolean isDirectory() 测试此抽象路径名表示的文件是否是目录
package com.java1234.chap10.yun2;

import java.io.File;
/**
 * 打印文件
 * @author Administrator
 *
 */
public class Demo4 {
	
	public static void ListFile(File file) {
		if (file!=null) {
			if (file.isDirectory()) {	//是目录
				File f[]=file.listFiles();	//遍历目录
				if (file!=null) {
					for (int i = 0; i < f.length; i++) {
						ListFile(f[i]); 	//递归调用
					}
				}
			} else {	//是文件
				System.out.println(file);
			}
		} 
	}
	
	
	public static void main(String[] args) {
		File file=new File("D://毕业设计");
		ListFile(file);
	}
}

字节输入输出流

InputStream 读取文件

字节输入,硬盘的文件读取到内存,读取到内存后就可以显示了
也就是从硬盘到内存

一般不这么用,太浪费了

package com.java1234.chap10.yun3;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

/**
 * @author WXYUNDI
 * 2020-11-02_20:31:47
 * InputStream读取文件到内存
 */
public class Demo1 {
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\测试文件.txt");
		InputStream inputStream=new FileInputStream(file);	//实例化FileInputStream
		
		byte b[]=new byte[1024];	
		
		int len=inputStream.read(b);
		inputStream.close();   //关闭输入流
		System.out.println("读取到的内容为:"+new String(b,0,len,"UtF-8"));
		
	}
}

指定大小的字节数组,节省空间

public class Demo2 {
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\测试文件.txt");
		InputStream inputStream=new FileInputStream(file);	//实例化FileInputStream
		
		int FileLength=(int)file.length();	//文件长度
		byte b[]=new byte[FileLength];	//指定大小的字节数组,节省空间
		
		inputStream.read(b);
		inputStream.close();   //关闭输入流
		System.out.println("读取到的内容为:"+new String(b,"UtF-8"));
		
	}
}

一个字节一个字节的读取,放到b字节数组里

public class Demo3 {
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\测试文件.txt");
		InputStream inputStream=new FileInputStream(file);	//实例化FileInputStream
		
		int FileLength=(int)file.length();	
		byte b[]=new byte[FileLength];	
		int temp=0;
		int len=0;
		while ((temp=inputStream.read())!=-1) {
			//一个字节一个字节的读取,放到b字节数组里
			b[len++]=(byte)temp;
		}
		
		inputStream.close();   //关闭输入流
		System.out.println("读取到的内容为:"+new String(b,"UtF-8"));
		
	}
}

OutputStream 写入文件

从内存到硬盘
FileOutputStream(file)默认会覆盖原来的内容,即默认为FileOutputStream(file,false);
改成FileOutputStream(file,true);就会在原有文件后边写了

package com.java1234.chap10.yun3;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Demo4 {
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\测试文件.txt");
		OutputStream out=new FileOutputStream(file);	//追加默认为false,改成(file,"true")就好了
		String str="你好,我好,大家好";
		byte b[]=str.getBytes();
		out.write(b);	//覆盖了
		out.close();
		
		
	}
}

缓冲和非缓冲的区别及性能对比

BufferedInputStream 和fBuferedOutputStream

package com.java1234.chap10.yun3;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * @author WXYUNDI
 * 2020-11-02_21:43:49
 * 缓冲提高效率
 */
public class Demo7 {
	
	public static void bufferStream() throws Exception{
		//定义一个带缓冲的字节输入流
		BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("D:\\java基础教程笔记.docx"));
		//定义一个带缓冲的字节输出流
		BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\作业用\\复制的文件2.docx"));
		
		int b=0;
		long statrtime=System.currentTimeMillis();//开始时间
		
		while ((b=bufferedInputStream.read())!=-1) {
			bufferedOutputStream.write(b);
			}
		bufferedInputStream.close();
		bufferedOutputStream.close();
		
		long endtime=System.currentTimeMillis();//结束时间
		System.out.println("缓冲花费的时间:"+(endtime-statrtime));
		
	}
	
	
	
	//非缓冲
	public static void stream() throws Exception {
		InputStream inputStream=new FileInputStream("D:\\java基础教程笔记.docx");
		OutputStream outputStream=new FileOutputStream("D:\\作业用\\复制的文件.docx");
		int b=0;
		long statrtime=System.currentTimeMillis();//开始时间
		
		while ((b=inputStream.read())!=-1) {
			outputStream.write(b);
			}
		inputStream.close();
		outputStream.close();
		
		long endtime=System.currentTimeMillis();//结束时间
		System.out.println("非缓冲花费的时间:"+(endtime-statrtime));
	}
	
	
	public static void main(String[] args) throws Exception {
		stream();
		bufferStream();
	}
}

字符输入输出流

更强大一点

Reader 读取文件

package com.java1234.chap10.yun4;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class Demo1 {
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\test.txt");
		Reader reader=new FileReader(file);
		char c[]=new char[1024];
		int len=reader.read(c);
		reader.close();	//关闭字符输入流
		System.out.println("is:"+new String(c,0,len));
	}

}

一个一个读

package com.java1234.chap10.yun4;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class Demo2 {
	public static void main(String[] args) throws Exception {
		File file=new File("D:\\test.txt");
		Reader reader=new FileReader(file);
		char c[]=new char[1024];
		int temp=0;
		int len=0;		
		while ((temp=reader.read())!=-1) {
			c[len++]=(char)temp;	
		}
		//int len=reader.read(c);
		reader.close();	//关闭字符输入流
		System.out.println("is:"+new String(c,0,len));
	}

}

Writer 写入文件

Writer out=new FileWriter(file,true);不覆盖

package com.java1234.chap10.sec04;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class Demo3 {

	public static void main(String[] args) throws Exception {
		File file=new File("D://test.txt");
		Writer out=new FileWriter(file);//Writer out=new FileWriter(file,true);不覆盖
		String str="我爱雨杰宝宝";
		out.write(str);  // 将字符串写入输出流
		out.close();  // 关闭输出流
	}
}

总结

  • 一定别忘了close();

  • 字节流的方法也太多了,掌握读取、写入、复制这些基本的,其他的慢慢研究吧

  • insert键表示插入状态,这样就不会写一个后边少一个了,numlock关着按倒0也是这样。

  • 小锋老师的最后一节课,撒花

  • 基础先学到这吧,还是得多敲代码,这几天打字速度倒提升不少,代码也是跟着别人敲的

  • 用好API把里边的方法多用用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值