Java IO流简单使用
Java IO流简单使用
也许是以前IO方面接触的比较少,我对于读和写的概念老是混淆。
趁着现在实习比较闲小结一下,我个人理解读和写都是针对程序,分别就是程序的输入和输出,或者叫读入写出。
字节流:
- InputStream
- OutputStream
字符流:
- Writer
- Reader
字节流到字符流的转换
- InputStreamReader
- OutputStreamWriter
(字符到字节: byte[] bs=str.getBytes(“UFT-8”)自己注意编码格式,当然还有很多转换方法)
File相关的读和写
实例
首先File类与文件读写无关,主要是一些文件的属性和一些创建、删除、结构列出等操作
创建如下的文件结构,然后列出所有文件和目录。
- root
- 123.txt
- child
- 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流简单使用的更多相关文章
- Java IO流详解(一)——简单介绍
文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...
- 【Java基础】Java IO流的总结
Java IO流分为输入流和输出流,而输入流和输出流中又分字符流和字节流.顾名思义,输入流则是输入到程序中计算,输出流是把程序的结果输出到文件或者设备.而字符流输入输出以字符为单位,字节流则是以字节为 ...
- 【Android】数据存储-java IO流文件存储
1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.Sh ...
- Java基础17:Java IO流总结
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- Java IO 流总结篇
1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...
- java——IO流01
移动文件有一种简单方法,不需要复制文件再删除文件. package com.unir.test01; import java.io.File; import java.io.IOException; ...
- Java IO流学习
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
- java IO流 总结
[-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...
- Java io流详解二
原文地址https://www.cnblogs.com/xll1025/p/6418766.html 一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间 ...
随机推荐
- sqoop从hdfs 中导出数据到mysql
bin/sqoop export \ --connect "jdbc:mysql://mini1:3306/study?useUnicode=true&characterEncodi ...
- Qt类反射机制
前言 如何通过类名动态的创建对象(类反射),对于Java开发者来说一点也不陌生,当然Qt也提供了一个元对象系统(The Meta-Object System),通过这个系统我们可以动态的在运行时获 ...
- linux上FTP服务器搭建
一.启动vsftpd服务 1. 启动VSFTP服务器 A. cenos下运行:yum install vsftpd B. 登录Linux主机后,运行命令:"service vsftpd st ...
- VM克隆之后启动eth0找不到eth0:unknown interface:no such device
问题出现:VMware 克隆之后,ifconfig命令执行找不到eth0,报错 eth0:unknown interface:no such device 是因为/etc/sysconf/networ ...
- mac上制作u盘启动盘
Mac上制作Ubuntu USB启动盘 一.下载ubuntu iso镜像 二.将iso转换为img文件 $ hdiutil convert -format UDRW -o /path/to/gener ...
- C#基础语言知识--编译和执行过程
http://blog.csdn.net/stive_sourcexin/article/details/51329697
- python中的self
1.首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中se ...
- Kotlin——高级篇(五):集合之常用操作符汇总
在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...
- 本地代码推送到github仓库
git 初始化 cd 到需要提交的项目目录下,执行git init 配置用户名和邮箱 git config --global user.name "codingID" git co ...
- Phonetic Symbols:2个半元音:[w] ,[j]
2个半元音音标发音技巧与单词举例 原文地址:http://www.hlyy.in/1243.html 2个半元音音标发音技巧与半元音单词举例 [w] 发音技巧: 嘴唇张开到刚好可以含住一根吸管的程度 ...