Java IO流简单使用

也许是以前IO方面接触的比较少,我对于读和写的概念老是混淆。 
趁着现在实习比较闲小结一下,我个人理解读和写都是针对程序,分别就是程序的输入和输出,或者叫读入写出。

字节流:

  • InputStream
  • OutputStream

字符流:

  • Writer
  • Reader

字节流到字符流的转换

  • InputStreamReader
  • OutputStreamWriter 
    (字符到字节: byte[] bs=str.getBytes(“UFT-8”)自己注意编码格式,当然还有很多转换方法)

File相关的读和写

实例

首先File类与文件读写无关,主要是一些文件的属性和一些创建、删除、结构列出等操作 
创建如下的文件结构,然后列出所有文件和目录。

  1. root

    • 123.txt
    • child 
      1. 456.txt
package www.zcs.com;
import java.io.File;
import java.io.IOException; public class FileTest { public static void main(String[] args) throws IOException, IllegalAccessException {
File root = new File("E:\\test");
if (!root.exists())
root.mkdir();
File file1 = new File("E:\\test\\123.txt");
if (!file1.exists())
file1.createNewFile();
File file2 = new File("E:\\test\\child");
if (!file2.exists())
file2.mkdir();
File file11 = new File("E:\\test\\child\\456.txt");
if (!file11.exists())
file11.createNewFile();
listDiretory(root);
} /**
* 列出指定目录下的所有文件和目录
*
* @param dir
* @throws IllegalAccessException
*/
public static void listDiretory(File dir) throws IllegalAccessException {
for (File f : dir.listFiles()) {
if (f.isFile())
System.out.println(f);
if (f.isDirectory()) {
System.out.println(f);
listDiretory(f);
}
}
} }

输出如图

File的读写

下面也包含关于字节和字符的转换

package www.zcs.com;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; public class StreamWithRW { public static void main(String[] args) throws IOException {
String file = "C:/Users/Administrator/Desktop/stream.txt";
String charset = "UTF-8";
FileOutputStream outputStream = new FileOutputStream(file);//默认如果文件存在,则会覆盖。若想在文件里追加内容new FileOutputStream(file,true)
OutputStreamWriter writer = new OutputStreamWriter(outputStream, charset);
try {
writer.write("这是我要写入的中文");
} finally {
writer.close();
}
// 可以替换成如下代码
// try{
// outputStream.write("这是我要写入的中文".getBytes(charset));
// }finally{
// outputStream.flush();
// outputStream.close();
// }
FileInputStream inputStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inputStream, charset);
StringBuffer buffer = new StringBuffer();
char[] buf = new char[64];
int count = 0;
try {
while ((count = reader.read(buf)) != -1)
buffer.append(buf, 0, count);
} finally {
reader.close();
}
System.out.print(buffer.toString());
} }

小结:

字节流

OutputStream本身只能读取一个字节,读一个Int可以通过右移来实现的

DataOutputStream:对”OutputStream”功能的扩展,可以更加方便的读取int,long,字符等类型数据 
writeInt()/writeDouble()/writeUTF()。

BufferedOutputStream缓冲读取,大文件时效率更高

字符流 
BufferedReader readLine 一次读一行 
BufferedWriter/PrintWriter 中write方法不识别换行,需要writeNewLine/println可以识别

扩展

对象序列化和反序列化简单使用 
1、对象序列化就是将Object转换为byte序列,反之叫对象的反序列化 
2、序列化流(ObjectinputStream)是过滤流—writeobject 反序列化流(ObjectInputStream)–readObject 
3、序列化接口(Serializable) 
对象必须实现序列化借口,才能进行序列化

把自己创建的一个类序列化写到某个.dat文本里,然后反序列化读出
package www.zcs.com.ioTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; public class SerializedTest { public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, IOException {
Student s=new Student(12,"小明");
String sc="./data/test.dat";
serializedWrite(s,sc);
deserializedPrint(sc);
} /*
* 任务: 把自己创建的一个类序列化写到某个.dat文本里,然后反序列化读出
*/
public static void serializedWrite(Object ob,String sc) {
try {
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(sc));
out.writeObject(ob);
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void deserializedPrint(String sc) throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream in=new ObjectInputStream(new FileInputStream(sc));
Student s=(Student)in.readObject();
s.show();
}
} class Student implements Serializable{
private int age;
private String name; public Student(int age, String name) {
super();
this.age = age;
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println(age+" "+name);
}
}
 

Java IO流简单使用的更多相关文章

  1. Java IO流详解(一)——简单介绍

    文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...

  2. 【Java基础】Java IO流的总结

    Java IO流分为输入流和输出流,而输入流和输出流中又分字符流和字节流.顾名思义,输入流则是输入到程序中计算,输出流是把程序的结果输出到文件或者设备.而字符流输入输出以字符为单位,字节流则是以字节为 ...

  3. 【Android】数据存储-java IO流文件存储

    1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.Sh ...

  4. Java基础17:Java IO流总结

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. Java IO 流总结篇

    1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...

  6. java——IO流01

    移动文件有一种简单方法,不需要复制文件再删除文件. package com.unir.test01; import java.io.File; import java.io.IOException; ...

  7. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

  8. java IO流 总结

    [-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input  Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...

  9. Java io流详解二

    原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...

随机推荐

  1. 跟着百度学PHP[14]-PDO的预处理语句2

    在$sql = $pdo -> prepare("insert into users(gold,user,password) values(?,?,?)"):条语句我们不仅仅 ...

  2. EMMC与nand flash的区别

    1.NAND Flash 是一种存储介质,要在上面读写数据,外部要加主控和电路设计. 2.eMMC是NAND flash+主控IC ,对外的接口协议与SD.TF卡类似:对厂家而言简化了电路设计,降低了 ...

  3. nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务

    nginx 为什么要反向代理  影藏后端   高效连接(给nginx,他自己返回)  端口冲突解决  多个服务 单机使用反向代理可以根据不同url匹配到不同站点   rsync 的工作原理和应用实例 ...

  4. Docker mysql 连接 “The server requested authentication method unknown to the clien”错误

    查了下,出现这个错误的原因是从mysql 5.6开始,mysql密码加密算法更改了. 我装的mysql 8.* ,那么有两种解决方法: mysql 版本选择 <= 5.6 修改密码 docker ...

  5. js一个数组变为指定长度的多个数组

    var dataArr = [0,1,2,3,4,5,6,7,8,9,10]; var newArr = []; var s = parseInt(dataArr.length / 4); var n ...

  6. mysql5.7 安装版安装

    参考 http://dev.mysql.com/doc/refman/5.7/en/installing.html 下载mysq5.7的安装包 http://dev.mysql.com/downloa ...

  7. [POJ] Brackets Sequence

    This problem can be solved elegantly using dynamic programming. We maintain two arrays: cnt[i][j] -- ...

  8. 动态获取selected的value值

    两个select选项,第一个选项可以选1-9之间的数字,第二个选项可以选0到9之间的数字,要满足成人和儿童的总和不大于9,且一个成人最多带两名儿童 <div> <span>成人 ...

  9. 【MarkDown】使用Html样式和折叠语法

    MarkDown很方便,但基本语法有些不足:比如无法使用折叠语法,无法让文字有不同的颜色. 这些功能可以实现,不过需要使用Html语法进行扩展.这篇文章主要是整理一下这些技巧,方便更好的使用. 一.折 ...

  10. kafka_2.11-0.10.1.1集群搭建安装配置

    在搭建kafka集群之前,请保证zookeeper已安装. 1.下载 官网下载链接:http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.10.1.1/ ...