java io流操作_【Java基础】IO流操作
一、IO流概念: 输入输出流,也就是可以用来读写数据,以及上传下载数据。
二、分类:
1、从流的对象来分: 1)高端流:所有程序或者内存中的流都称为高端流。
2)低端流:所有外界设备中的流都是低端流。
如何区分到底是高端流还是低端流:
一般来说流的对象的后缀包含reader或者writer一般都是高端流,否则是低端流。(除了PrintStream,PrintStream也是高端流)
2、从数据的流向来分: 1)输入流:从外界设备-->程序,也就是读数据的动作。
2)输出流:从程序-->外界设备,也就是写数据的动作。
3、从数据的格式来分: 1)字节流:是用来处理声音或者图片等等二进制信息的流。
2)字符流:用来处理字符数据的流。
4、从流的对象是否需要包装来分: 1)原始流:流在实例化过程中,不需要通过另外一个流来包装自己的流。
2)包装流:流在实例化过程中,需要通过另外一个流来包装自己的流。
原始流都是低端流,包装流都是高端流。
三、常用IO流:
1、文件操作
字节流:
1)FileOutputStream
2)FileInputStream
字符流:
3)FileWriter
4)FileReader
区别:
(1)字节流的操作是直接与文件本身关联,不使用缓冲区;
(2)字符流的操作是通过缓冲区与文件关联。
一般都使用字节流,中文操作采用字符流。
2、内存操作流(多用于Java web)
5)ByteArrayOutputStream 内存向程序输出
6)ByteArrayInputStream 程序向内存输入
package io.demo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class ByteArrayDemo {
public static void main(String[] args) {
String str = "Hello World";
ByteArrayInputStream bis = new ByteArrayInputStream(str.getBytes()); // 内存输入流,将str输入保存在内存中
ByteArrayOutputStream bos = new ByteArrayOutputStream(); // 内存输出流,内容输出
int temp = 0;
while ((temp = bis.read()) != -1) {
bos.write((char) temp);
}
System.out.println(bos.toString());// bos.toString()取出内存输出内容
}
}
3、BufferReader:缓冲区读取
package io.demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class BufferReaderIODemo {
public static void main(String[] args) {
//输出c:\demo.txt文件的内容
File file = new File("C:" + File.separator + "demo.txt");
if (file.exists())
try {
InputStreamReader isr = new InputStreamReader(
new FileInputStream(file));
BufferedReader buf = new BufferedReader(isr);
while (true ) {
String str=buf.readLine();
if(null ==str){
break;
}
System. out.println(str);
}
buf.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、java提供两个类用于字节-字符流的转换
7)InputStreamReader:将字节的输入转换为字符流
8)OutputStreamWriter:将字符的输出流转换为字节流的输出
5、对象序列化:Serializable
9)ObjectOutputStream:对象序列化
10)ObjectInputStream:对象反序列化
首先需要实现序列化的对象必须实现 java.io.Serializable接口。
package io.demo;
import java.io.Serializable;
//Person類要實現 Serializable接口
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
public Person(String name, int age) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return this .name + ":" + this.age ;
}
private String name;
private int age ;
}
package io.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjIODemo {
public static void main(String[] args) throws ClassNotFoundException {
File file = new File("c:" + File.separator + "demo.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 輸出流,以對象的形式寫入文件c:\demo.txt
ObjectOutputStream objo = null;
try {
objo = new ObjectOutputStream(new FileOutputStream(file));
objo.writeObject( new Person("諸葛亮" , 22));
objo.writeObject( new Person("魯樹" , 23));
objo.writeObject( new Person("孔明" , 25));
objo.writeObject( new Person("valiate" , 26));
objo.close();
} catch (Exception e) {
e.printStackTrace();
}
// 從c:\demo.txt以對象的形式讀出
ObjectInputStream obji = null;
try {
obji = new ObjectInputStream(new FileInputStream(file));
while (true ) {
Person per = (Person) obji.readObject();
if (null == per)
break;
System. out.print(per + " " );
per = (Person) obji.readObject();
}
obji.close();
} catch (Exception e) {
// 讀到文件結束符EOF會拋出EOFException異常,屏蔽異常信息輸出
// e.printStackTrace();
}
}
}
//諸葛亮:22 魯樹:23 孔明:25 valiate:26
java io流操作_【Java基础】IO流操作相关推荐
- java中override快捷键_【基础回溯1】面试又被 Java 基础难住了?推荐你看看这篇文章。...
本文已经收录自 https://github.com/Snailclimb/JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. ...
- 没有基础的人学java开发难吗_零基础的人怎么学习Java
编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...
- java 线程 操作系统线程_线程基础:线程(1)——操作系统和线程原理
1.概述 我在写"系统间通信技术专栏"的时候,收到很多读者的反馈.其中有一部分读者希望我抽空写一写自己关于对Java线程的使用经验和总结.巧的是,这个月我所在的技术团队也有很多同事 ...
- java字节流转字符串_字节流与字符流的区别及相互转换
先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输出都是以流的形 ...
- java 执行oracle命令_利用oracle存储过程执行操作系统命令
以下方法在WINNT,LINUX下的oracle9i上测试通过,java过程调用系统命令 首先给使用java存储过程的用户授予一定的权限 <>表示所有文件,也可以单独指定文件. r w e ...
- java中主函数_(基础)java中的主函数
Java中的主函数 1.由JVM调用:JVM通过类名直接调用主函数(静态方法) 2.主函数的形参是一个字符串数组: String[] args 3.运行主函数时,如果没有向其传递参数,JVM会自动创建 ...
- java pv操作_理解同步的PV操作
PV操作是Edsger Dijkstra提出的一种经典的解决同步不同执行线程的问题的方法,这种方法是基于一种叫信号量的特殊变量来实现的. 简单理解为就是通过共享变量+信号量实现的一种同步机制,其应用与 ...
- java 图片宽高_[Java]获取图片高和宽
通过javax.imageio.ImageIO类中的read()函数读取的图片,存放在类java.awt.image.BufferedImage类中.调用BufferedImage类中的getWidt ...
- java 历遍 类_[Java] 遍历指定包名下所有的类(支持jar) | 学步园
项目需要,仅做记录. 支持包名下的子包名遍历,并使用Annotation(内注)来过滤一些不必要的内部类,提高命中精度. 通过Thread.currentThread().getContextClas ...
- java语言金山打字_[Java教程]java实现 swing模仿金山打字 案例源码
[Java教程]java实现 swing模仿金山打字 案例源码 0 2014-11-17 12:00:21 java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http ...
最新文章
- 转:PHP Liunx 服务安全防范方案
- myeclipse在weblogic中的开发
- 【转载】linux 下 cpu使用情况分析
- 人工智能一定要用python吗_学人工智能一定要学Python吗?
- AI:狄拉克之海上的涟漪
- pandas 机器学习_机器学习的PANDAS
- Spring Boot Swagger3启动出现警告Unable to interpret the implicit parameter configuration with dataType
- 神奇DP [HNOI2004] 打砖块
- PHP自动售货发卡网源码,PHP自动售货发卡网源码 集成多种支付接口
- 极域电子教室创建和登录教师端的方法
- unity天空盒渐变_unity如何制作绚丽的太空天空盒?
- 中文书籍中对《人月神话》的引用(完结,共110本):软件工程通史1930-2019、实用Common Lisp编程……
- 1212_MISRA_C规范学习笔记_控制表达式规则要求
- 二项式定理与多变量函数的泰勒展开_拔剑-浆糊的传说_新浪博客
- 谷歌浏览器显示喔唷崩溃啦 google chrome浏览器崩溃了
- 实录丨戴琼海:深度学习遭遇瓶颈,全脑观测启发下一代AI算法
- Android LeakCanary使用详细教程
- 计算机弹歌光年之外谱子,邓紫棋《光年之外》完整钢琴谱
- C#参数详解一(形参和实参)
- Eclipse 配置JDK
热门文章
- php怎么上传函数,php上传函数怎么封装
- python建立多台电脑共用的_用virtualenv建立多个Python独立虚拟开发环境
- ubantu获取信息_Ubuntu 下查看CPU 信息命令
- 远程桌面连计算机名称变ipv6,利用ipv6,从家里远程连接到学校的电脑上
- equation在c语言中是什么意思,MathType出现此对象创建于Equation中的问题怎么办
- java开发文档怎么写_程序员该不该写技术文档,怎么写文档,易懂又能提升自己...
- php保存复制粘贴的网页内容,JS实现网站内容的禁止复制和粘贴、另存为
- onenote快捷键_高效飞快地使用onenote快捷键:快捷键功能架构解析
- vba 当前文件名_值得学习和珍藏的VBA常用编程代码语句
- python rest api_Python调用REST API接口的几种方式汇总