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. org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class

    转载自:http://songjianyong.iteye.com/blog/1663170 org.springframework.transaction.CannotCreateTransacti ...

  2. 用HTML5/CSS3/JS开发Android/IOS应用框架大全

    现在人人都想成为安卓/IOS应用开发工程师.其实,安卓/IOS应用可以用很多种语言来实现.由于我们前端开发工程师,对HTML5/CSS/JavaScript的网络编程已经相当熟悉了.所以,今天大家将会 ...

  3. 【转】Python 第三方 http 库-Requests 学习

    原文地址:http://www.itwhy.org/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/python/python-%E7%AC%AC%E4%B8%89%E6%9 ...

  4. Oracle常用命令大全

    一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...

  5. rgb2yuv

    1.rgb2yuv422p 代码的运算速度取决于以下几个方面 1. 算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BMP图片的编码复杂. 2. CPU自身的速度和设计架构 3. CPU的总线 ...

  6. Origin8.0使用心得(不定时更新)

    如何画双Y轴坐标? 网上的教程很多,有点鱼龙混杂的感觉,今天整理一下最简单的方法,备忘. 有3组数据,1组自变量,2组因变量.如何在同一张图下使用同一个X轴,但左边的Y轴与右边的Y轴的刻度不一样? 最 ...

  7. 利用wireshark抓取远程linux上的数据包

    原文发表在我的博客主页,转载请注明出处. 前言 因为出差,前后准备总结了一周多,所以博客有所搁置.出差真是累人的活计,不过确实可以学习到很多东西,跟着老板学习做人,学习交流的技巧.入正题~ wires ...

  8. [Algorithms] Longest Common Substring

    The Longest Common Substring (LCS) problem is as follows: Given two strings s and t, find the length ...

  9. 移动端:判断是否微信端、判断手机操作系统(ios或android)

    http://caibaojian.com/browser-ios-or-android.htmlfunction is_weixin() { var ua = window.navigator.us ...

  10. MySQL 索引设计概要

    在关系型数据库中设计索引其实并不是复杂的事情,很多开发者都觉得设计索引能够提升数据库的性能,相关的知识一定非常复杂. 然而这种想法是不正确的,索引其实并不是一个多么高深莫测的东西,只要我们掌握一定的方 ...