io流和序列化
1.使用File操作文件
public class IoTest {
public static void main(String[] args) throws IOException {
/* 01.删除或者创建文件
* File file=new File("e:/io.txt");
addOrDel(file); */
File file=new File("e:/java/hello");
//file.mkdir(); 只能创建一层目录
file.mkdirs(); //同时创建多层目录
}
/**
* 删除或者创建文件
*/
public static void addOrDel(File file) throws IOException {
if (!file.exists()) { //判断文件是否存在
if (file.createNewFile()) {//创建成功
System.out.println("创建成功!");
System.out.println("是否是文件:"+file.isFile());
System.out.println("文件名称:"+file.getName());
System.out.println("文件大小:"+file.length());
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
}else {
System.out.println("创建失败");
}
}else {
System.out.println("文件已经存在!");
if (file.delete()) {//删除文件
System.out.println("删除成功!");
}
}
}
}
public class FileInputStreamTest01 {
public static void main(String[] args) throws Exception {
/*
* 创建输入流对象 从电脑中的源文件 获取 数据到 内存中
* 如果没有指定的文件 会报错 FileNotFoundExecption
*/
FileInputStream stream=new FileInputStream("e:/hello.txt");
//输出字节数
System.out.println("可读取的字节数:"+stream.available());
/*
* 读取内容
* 循环读取数据,会从输入流中读取一个8位的字节!把它转换成了0-255之间的整数返回了!
* 我们要想拿到具体的值!必须把整数转成字符 char (0-65535)
* read()当读取文件的结尾处 返回-1
* UTF-8 :中的 中文字符以及中文 占据 3个 字节, 数字和字母占1个字节
* GBK,gb2312: 编码中 中文和符号都占2个字节!
*/
int num;
while((num=stream.read())!=-1){
System.out.print(num);
}
//关闭输入流
stream.close();
}
}
public class FileOutputStreamTest02 {
public static void main(String[] args) throws Exception {
/*
* 01.java项目的编码格式 要和输出文件的编码一致 都是UTF-8
* 02.如果系统中没有指定的文件,会默认创建
* 03.如果重复输出,则上次的内容会被覆盖
* 如果不想覆盖!使用重载!在第二个参数的位置输入true
*/
FileOutputStream stream=new FileOutputStream("e:/hello.txt",true);
String str="真的好棒!";
//参数传递需要一个Byte类型的数组
stream.write(str.getBytes());
//关闭输出流
stream.close();
}
}
public class FileReaderTest03 {
public static void main(String[] args) throws Exception {
//获取当前的编码格式
System.out.println("使用的编码为:"+System.getProperty("file.encoding"));
//创建输入流 Reader
Reader reader=new FileReader("e:/hello.txt");
//因为读取的字符 创建数据的中转站 会有多余的空格产生
char [] words=new char[1024];
int num;
//需要字符串的 拼接
StringBuilder sb=new StringBuilder();
while((num=reader.read(words))!=-1){
sb.append(words);
}
System.out.println(sb.toString());
//关闭输入流
reader.close();
}
}
public class BufferedReaderTest04 {
public static void main(String[] args) {
/*
* 创建输入流 Reader
* BufferedReader和FileReader联合使用
* 效率高 底层有默认的缓冲区 还可以逐行读取
*/
//创建BufferedReader对象 传递Reader的对象
BufferedReader br=null;
Reader reader=null;
try {
reader = new FileReader("e:/hello.txt");
br=new BufferedReader(reader);
//一行一行的读取
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流 先开的后关
try {
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
6.使用FileWriter读取文件内容(字符流)
public class FileWriterTest05 {
public static void main(String[] args) {
try {
/*
* 输出流 默认的会给我们创建新的文件
* 不使用第二个参数! 那么默认会覆盖之前的内容
* ctrl +shift +t 选中需要查询的类或者接口
*/
Writer writer=new FileWriter("e:/hello.txt",true);
writer.write("我爱北京天安门!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
7.使用BufferedWriter写入文件(字符流)
public class BufferedWriterTest06 {
public static void main(String[] args) {
try {
//创建输出流对象
Writer writer=new FileWriter("e:/hello.txt",true);
//创建BufferedWriter对象
BufferedWriter bw=new BufferedWriter(writer);
//换行
bw.newLine();
bw.write("北京也爱你!");
bw.newLine();
bw.write("北京也爱你!");
bw.close();
writer.close();
//获取输入流
Reader reader=new FileReader("e:/hello.txt");
BufferedReader br=new BufferedReader(reader);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
8.使用InputStreamReader解决中文乱码问题
public class InputStreamReaderTest07 {
public static void main(String[] args) {
BufferedReader br=null;
InputStreamReader isr=null;
InputStream stream=null;
try {
//创建输入流对象
stream=new FileInputStream("e:/hello.txt");
System.out.println("文件的大小:"+stream.available());
//使用InputStreamReader来解决乱码
isr=new InputStreamReader(stream, "utf-8");
//读取
br=new BufferedReader(isr);
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
isr.close();
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
9.读取2进制文件
public class DataInputStreamTest08 {
public static void main(String[] args) throws Exception {
//创建输入流
InputStream fis=new FileInputStream("e:/mm.mp3");
//读取2进制文件
DataInputStream dis=new DataInputStream(fis);
//复制文件到另一个目录
OutputStream fos=new FileOutputStream("e:/U1/慢慢.mp3");
//以2进制的方式输出到指定的目录
DataOutputStream dos=new DataOutputStream(fos);
//开始读取
int data;
while((data=dis.read())!=-1){
//写入
dos.write(data);
}
dos.close();
fos.close();
dis.close();
fis.close();
}
/**
* 序列化:将内存中对象的状态或者信息 转换成 持久化的过程!
* 反序列化:把持久化的对象 变成 内存中的一个对象的过程!
* 目的:
* 01.使自定义的对象 持久化!对象本身是在内存中的!我们想把它持久化!
* 02.把对象从一个地方传递到另一个地方!
* 03.使程序具有维护性!
*
* 怎么才能实现对象的序列化??
* 1.让对象所属的类 实现Serializable 接口 之后, 这个类 就可以序列化了!
* Serializable:只是一个能否被序列化的标记!
*/
public class Student implements Serializable{ //实体类 private Integer id;
private Integer age;
private String name; @Override
public String toString() {
return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";
}
public Student() {
super();
}
public Student(Integer id, Integer age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }
用于序列化的Student类
public class SerializableTest {
public static void main(String[] args) throws Exception { //序列化操作
//首先实例化一个对象
Student student=new Student(1, 500, "小白2");
//想序列化?从内存中 放入 持久化的介质中 输出流
FileOutputStream fos=new FileOutputStream("e:/student.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
//开始持久化
oos.writeObject(student);
oos.close();
fos.close();
}
}
序列化
/**
* 反序列化
* 需要和 序列化时候的包名 一致 不然 没法反序列化
*/
public class StudentTest {
public static void main(String[] args) throws Exception {
// 从文件中把对象 拿到 内存中 输入流
FileInputStream fis = new FileInputStream("e:/student.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
// 读取文件中的对象
Student student = (Student) ois.readObject();
System.out.println(student.getId());
System.out.println(student.getAge());
System.out.println(student.getName());
ois.close();
fis.close();
}
}
io流和序列化的更多相关文章
- IO流的序列化和反序列化
序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...
- Java 持久化之 --io流与序列化操作
1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...
- Java 持久化操作之 --io流与序列化
1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...
- Java 基础 IO流之序列化
一,前言 在前面的IO中,我们都是讲数据以字符串的形式保存.能不能将一个数组保存到文件呢,当取出数据时也是一个数组,如果能够实现那就完美了.我们都知道比较通用的有JSON格式的序列化,那java中也有 ...
- java 21 - 13 IO流之序列化和反序列化
序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输.对象 -- 流数据(ObjectOutputStream) 构造方法:ObjectInputStream(InputStream in) ...
- IO流之序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 l ...
- java ->IO流_序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流(对象 ...
- IO流(03)--序列化流、打印流
序列化流 Java提供了一种对象序列化的机制,用一个字节序列可以表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等信息.字节序列写入到文件中后,就相当于在文件中保存了一个对象信息 ...
- java io流与序列化反序列化
java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入 ...
随机推荐
- Java 下一代: 函数式编码风格——Groovy、Scala 和 Clojure 共享的函数结构及其优势
原文地址 本文内容 命令式处理 函数式处理 函数式编程的优势 所有 Java 下一代语言都包括函数式编程结构,让您可以从一个更高的抽象层面来思考问题.然而,语言间术语的不同使得难以看到类似的结构.本期 ...
- WIN10平板 传递优化文件能否删除
在给系统准备做Ghost备份之前,一般会运行一次磁盘清理,但是WIN10系统多了一个传递优化文件(现在看到的体积很小,但其实可能是4-5G) 这个文件只是WIN10改进了系统更新策略产生的,就像是BT ...
- MDX Cookbook 11 - 计算 Year Over Year 增长 (同比计算) ParallelPeriod
这一小节主要介绍如何在一个平行期间的度量值,当前值的对比对象是指当前值的上一年,上一个季度或者其它时间级别上与当前值同一时间点上的的那个对象.有一个非常常见的需求就是对比上一年同一个时间点的某个值来判 ...
- Hadoop2.2.0分布式安装配置详解[2/3]
前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试.文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题.搭建环境过程不重要,重要点 ...
- JAVA之Lamdba表达式使用摘要
1. of (of方法其生成的Stream是有限长度的,Stream的长度为其内的元素个数) Stream<Integer> integerStream = Stream.of(1, ...
- Eureka微服务ID
Instance ID用于唯一标识注册到Eureka Server上的微服务实例.我们可在Eureka Server的首页直观地看到各个微服务的Instance ID.例如,图11-1中的itmuch ...
- Javascript 原生Cookie使用用法
var oCookie = { setCookie: function (name, value, expireDays, path, domain) { var expireDays = expir ...
- (4) MySQL中EXPLAIN执行计划分析
一. 执行计划能告诉我们什么? SQL如何使用索引 联接查询的执行顺序 查询扫描的数据函数 二. 执行计划中的内容 SQL执行计划的输出可能为多行,每一行代表对一个数据库对象的操作 1. ID列 ID ...
- 11款最轻量级的CSS框架
日子一去不复返了HTML用于造型的网页.今天,CSS规则,很难想象没有它的任何网页设计.CSS在最近非常先进,用于创建复杂的Web设计和风格.那么,我们为什么要使用CSS框架?答案很简单.CSS框架主 ...
- spring batch中用到的表
1,批量表的前缀:{prefix}来自类AbstractJdbcBatchMetadataDao中的变量DEFAULT_TABLE_PREFIX 2,{prefix}job_execution:存放j ...