输入流与输出流

Java I/O
Input 输入–>读取 input 把外部数据输入到程序中,类似于上传
Output 输出–>写入 outinpput 把程序中的数据输出到磁盘等外部的存储空间上,类似于下载

JAVA API :java.io.File 类
File file = new File();
特有的方法有:
.mkdir()创建文件夹
lastModified()最后获取的时间
在这里插入图片描述
如何读写文件?

通过流来读写文件
流是一组有序的数据序列
以先进先出方式发送信息的通道
在这里插入图片描述
Java流的分类
在这里插入图片描述
I/O流:
使用FileInputStream 读文本文件步骤:
1.引入相关的类
2.构造文件输入流FileInputStream 对象
3.读取文件的数据
4.关流
FileInputStream 输入流: 父类
InputStream类常用方法 子类
1.int read( )
2.int read(byte[] b)
3.int read(byte[] b,int off,int len)
4.void close( )
5.int available():可以从输入流中读取的字节数目
子类FileInputStream常用的构造方法
FileInputStream(File file)
FileInputStream(String name)

FileInputStream fis=null;
fis =new FileInputStream(“D:”+File.separator+“Text”+File.separato+“test.java”);//文件夹的位置D:\Text\test.java
StringBuffer s=new StringBuffer();
byte[] b=new byte[1];//一个字一个字的读
while(fis.read(b)!=-1){//将读的字节存到数组中
String str=new String(b);//将字节数组中的数据转为字符串
s.append(str);//追加字符
System.out.println(s);
fis.close();

使用FileOutputStream 读文本文件步骤:
1.引入相关的类
2.构造文件输入流FileOutputStream 对象
3.读取文件的数据
4.关流

FileOutputStream输出流:** 父类**
OutputStream类常用方法:子类
void write(int c)
void write(byte[] buf)
void write(byte[] b,int off,int len)
void close()
void flush():强制把缓冲区的数据写到输出流中
子类FileOutputStream常用的构造方法
FileOutputStream (File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
1.前两种构造方法在向文件写数据时将覆盖文件中原有的内容
2.创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件

FileOutputStream fos=null;
fos=new FileOutputStream(“D:”+File.separator+“Text”+File.separator+“test.java”,true);
String str=“我是一颗海草海草”;
byte[] b=str.getBytes();//将字符串转为字节数组
fos.write(b);
fis.close();

将文件从D盘复制到另一个盘:
FileInputStream fis=null;
FileOutputStream fos=null;
fis =new FileInputStream(“D:”+File.separator+“tt.jpg”);
fos=new FileOutputStream(“E:”+File.separator+“tt.jpg”);
byte[] b=new byte[1024];
int len;
while((len=fis.read(b))!=-1){
fos.write(b,0,len);
}
关闭流

字符流:
输入流:
Reader
InputStreamReader,指定编码格式
FileReader,是InputStreamReader的子类,不能指定编码格式
BufferedReader 字符缓冲流(字符缓冲区,读取一行数据)
使用字符流读文件:
使用InputStreamReader 和 BufferedReader读取文件
输出流:

字符输入流:
Reader --> InputStreamReader --> FileReader --> BufferedReader
父类 解决出现乱码,指定编码格式 带缓冲区的类提高读取的效率

方法: read()
readLine()

字符输出流:
Writer --> OutputStreamWriter --> FileWriter --> BufferedWriter
父类 解决写入程序时出现乱码,指定编码格式 带缓冲区的类提高读取的效率

方法: writer()
newLine() //换行

读取二进制文件
DataInputStream类
FileInputStream的子类
与FileInputStream类结合使用读取二进制文件
DataOutputStream类
FileOutputStream的子类
与FileOutputStream类结合使用写二进制文件

FileInputStream fis=new
FileInputStream(“C:\HelloWorld.class”);
DataInputStream dis=new DataInputStream(fis);
dis.read ();
dis.close();

序列化和反序列化的过程
在这里插入图片描述
序列化是 将对象的状态写入到特定的流中的过程
反序列化则是 从特定的流中获取数据重新构建对象的过程

序列化的步骤:
1.实现Serializable接口
2.创建对象
3.调用writeObject()方法将对象写入文件
4.关闭对象输出流

**注意:**使用集合保存对象,可以将集合中的所有对象序列化
反序列化的步骤和序列化步骤一样。
如:
FileOutputStream fos=null;
ObjectOutputStream oos=null;
try {
fos=new FileOutputStream(“D:”+File.separator+“dog.info”);
oos=new ObjectOutputStream(fos);
Dog dog=new Dog(“大黄”,“土狗”);
oos.writeObject(dog);

	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}finally{
		try {
			oos.close();
			fos.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

**需要注意的:**如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时,必须按照写入的顺序读取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值