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. 自定义select模拟--基于jQuery

      说明 模拟select,实现原生select不能实现的样式 将html结构入在Html页面中,css,js做分离 开发人员引用只要引入相关文件,并$().selectbox()就可转换样式,有更新 ...

  2. 栈类Stack

    Stack类是Vector类的子类.它向用户提供了堆栈这种高级的数据结构.栈的基本特性就是先进后出.即先放入栈中的元素将后被推出.Stack类中提供了相应方法完成栈的有关操作. 基本方法: publi ...

  3. redis php 实例一

    下面的例子都是基于php-redis这个扩展的. 1,connect 描述:实例连接到一个Redis. 参数:host: string,port: int 返回值:BOOL 成功返回:TRUE;失败返 ...

  4. 【Python】IDLE清屏

    上网搜,没搜到可用的快捷键.但看到一个通过打印空内容来清屏的方法,smart ef clear(): for i in range(60): print

  5. 一个事半功倍的c#方法 动态注册按钮事件

    前几天在网上看见一个制作计算器的c#程序,其中有一个动态注册按钮事件,觉的很有用.于是实际操作了一哈, 确实比较好. 言归正传,下面就来讲讲怎样动态注册按钮事件. 首先,我们需要设置变量来获取点击一个 ...

  6. uva414 - Machined Surfaces

    uva414 - Machined Surfaces /* 水题,值得一提的是,getline使用时注意不能让它多吃回车键,处理方法可以用getchar. */ #include <iostre ...

  7. Android多线程分析之中的一个:使用Thread异步下载图像

    Android多线程分析之中的一个:使用Thread异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可.转载请注明出处 打算整理一下对 Android Fr ...

  8. 关于在ubuntu平台下使用apt-get命令下载速度太慢的问题解决

    1. 进入设置,从哪进都一样找到就行. 2.选择软件与更新(Software and updates,英语估计是这个把) 点击下载自:这个下拉框,选中其它站点,选择镜像 选择阿里的或者搜狐的镜像,然后 ...

  9. linux连接mysql命令

    连接MYSQL: 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL 找到mysql的安装目录,一般可以直接键入命令mysql -uroot -p,回车后提 ...

  10. Instagram发布动态自动裁剪照片说明

    发布Ins时,照片总是被截取一截,感觉很不爽...然后就仔细了解了Ins是如何限制图片大小的. 官方帮助说的很清楚,https://help.instagram.com/163182164042672 ...