本文是基于Linux环境运行,读者阅读前需要具备一定Linux知识

InputStream包含如下三个方法:

  • int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转化为int类型)
  • int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数
  • int read(byte[] b, int off, int len):从输入流中最多读取len个字节的数据,并将其存储在数组b中;放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数

FileInputStream继承InputStream,使用FileInputStream读取文件内容

代码1-1

import java.io.FileInputStream;
import java.io.IOException; public class FileInputStreamTest { public static void main(String[] args) {
if (args == null || args.length == 0) {
throw new RuntimeException("请输入路径");
}
FileInputStream fis = null;
try {
byte[] bbuf = new byte[1024];
int hasRead = 0;
fis = new FileInputStream(args[0]);
while ((hasRead = fis.read(bbuf)) > 0) {
System.out.print(new String(bbuf, 0, hasRead));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }

代码1-1运行结果:

root@lejian:/home/software/.io# cat text
Hello Spring
Hello Hibernate
Hello MyBatis
root@lejian:/home/software/.io# java FileInputStreamTest text
Hello Spring
Hello Hibernate
Hello MyBatis

Reader包含如下三个方法:

  • int read():从输入流中读取单个字符,返回从读取的字符数据(字符数据可直接转化为int类型)
  • int read(char cbuf[]):从输入流中最多读取cbuf.length个字符的数据,并将其存储在字符数组的cbuf中,返回实际读取的字符数
  • int read(char cbuf[], int off, int len):从输入流中最多读取len个字符的数据,并将其存储在数组b中;放入数组cbuf中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数

FileReader的父类继承自Reader,使用FileReader读取文件

代码1-2

import java.io.FileReader;
import java.io.IOException; public class FileReaderTest { public static void main(String[] args) {
if (args == null || args.length == 0) {
throw new RuntimeException("请输入路径");
}
FileReader fr = null;
try {
fr = new FileReader(args[0]);
char[] cbuf = new char[32];
int hasRead = 0;
while ((hasRead = fr.read(cbuf)) > 0) {
System.out.print(new String(cbuf, 0, hasRead));
}
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
if (fr != null) {
fr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}

代码1-2运行结果:

root@lejian:/home/software/.io# cat text
Java编程思想
算法
编译原理
root@lejian:/home/software/.io# java FileReaderTest text
Java编程思想
算法
编译原理

代码1-3

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class FileOutputStreamTest { public static void main(String[] args) {
if (args == null || args.length < 2) {
throw new RuntimeException("请输入两个路径");
}
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(args[0]);
fos = new FileOutputStream(args[1]);
byte[] bbuf = new byte[32];
int hasRead = 0;
while ((hasRead = fis.read(bbuf)) > 0) {
fos.write(bbuf, 0, hasRead);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }

OutputStream和Writer:

  • void write(int b):将指定的字节/字符输出到输出流中,其中c代表字节,也可以代表字符
  • void write(byte b[]/char cbuf[]):将字节数组/字符数组中的数据输出到指定输出流中
  • void write(byte b[]/char cbuf[], int off, int len):将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中

Writer里还包含如下两个方法:

  • void write(String str):将str字符串里包含的字符输出到指定输出流中
  • void write(String str, int off, int len):将str字符串里从off位置开始,长度为len的字符输出到指定的输出流中

使用FileInputStream来执行输入,FileOutputStream来执行输出

代码1-3运行结果:

root@lejian:/home/software/.io# cat input
Java编程思想
算法
编译原理
root@lejian:/home/software/.io# java FileOutputStreamTest input output
root@lejian:/home/software/.io# cat output
Java编程思想
算法
编译原理

使用FileWriter来执行输出

代码1-4

import java.io.FileWriter;
import java.io.IOException; public class FileWriterTest { public static void main(String[] args) {
if (args == null || args.length == 0) {
throw new RuntimeException("请输入路径");
}
FileWriter fw = null;
try {
fw = new FileWriter(args[0]);
fw.write("数据结构与算法\n");
fw.write("Python基础教程\n");
fw.write("C和指针\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (fw != null) {
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }

代码1-4运行结果:

root@lejian:/home/software/.io# java FileWriterTest book
root@lejian:/home/software/.io# cat book
数据结构与算法
Python基础教程
C和指针

Java7之后,很多IO资源类都实现了AutoCloseable接口,只要在try语句中声明的IO流都可以自动关闭,但有一些IO流像FileWriter这样的输出流,如果IO流不显示的关闭,输出流缓冲区的数据无法flush到实际的物理节点,因为执行IO流的close()方法前,会先执行flush()方法

FileInputStream、FileReader、FileInputStream、FileWriter使用小结的更多相关文章

  1. java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr

    BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...

  2. (转)Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别

    Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别 ava.io下面有两个抽象类:InputStream和 ...

  3. J04-Java IO流总结四 《 FileReader和FileWriter 》

    FileReader和FileWriter的源码相对简单,下面通过分析它们的源码以更好地进行理解这两个流 1. FileReader FileReader实现了读取底层的字节数据并将其转换为字符数据的 ...

  4. FileReader和FileWriter

    FileReader和FileWriter 使用fileoutputstream类向文件写入数据与使用fileinputstream类从文件中将内容读取出来,存在不足,就是中文占两个字节, 搞不好就会 ...

  5. Java-IO之FileReader和FileWriter

    FileReader是用于读取字符流的类,它继承于InputStreamReader,要读取原始字节流,考虑使用FileInputStream:FileWriter是用于写入字符流的类,继承于Outp ...

  6. [十八]JavaIO之FileReader 和 FileWriter

    简介 FileReader FileWriter 都是提供操作文件的便捷类 这两个类的实现非常的简单 原理 回忆下之前的InputStreamReader和OutputStreamWriter Inp ...

  7. java io系列22之 FileReader和FileWriter

    FileReader 是用于读取字符流的类,它继承于InputStreamReader.要读取原始字节流,请考虑使用 FileInputStream.FileWriter 是用于写入字符流的类,它继承 ...

  8. FileReader与FileWriter

    分别继承于InputStreamReader   OutputStreamWriter 所以: FileReader:new FileReader(“d:/back/string.txt”) =    ...

  9. Java IO: FileReader和FileWriter

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍FileReader和FileWriter.与FileInputStream和File ...

  10. Java IO(十七)FIleReader 和 FileWriter

    Java IO(十七)FIleReader 和 FileWriter 一.介绍 FIleReader 和 FileWriter 是读写字符文件的便利类,分别继承于 InputStreamReader ...

随机推荐

  1. LeetCode---Binary Search

    475. Heaters 思路:每趟循环查找离房子最近的热水器,计算距离,最后取最大距离 public int findRadius(int[] houses, int[] heaters) { Ar ...

  2. Oracle索引失效问题:WHERE C1='' OR C2 IN(SubQuery),并发请求时出现大量latch: cache buffers chains等待

    问题描述: 项目反馈某功能响应时间很长,高峰期时系统整体响应很慢... 获取相应的AWR,问题确实比较严重,latch: cache buffers chains等待,因为这些会话SQL执行时间太长, ...

  3. mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc的区别!

    php从mysql中访问数据库并取得数据,取得结果的过程中用到好几个类似的方法,区别及用法值得区分一下,看下面的代码   代码如下: <?php $link=mysql_connect('loc ...

  4. Net操作Excel(终极方法NPOI)

    NPOI 待学习 http://www.cnblogs.com/stone_w/archive/2012/08/02/2620528.html

  5. 【学】React的学习之旅4-添加事件(onChange)

    实现联动绑定,在文本框中输入内容的同时,后面的span里内容跟着一起变化: onChange(),一旦触发一次变动,就执行某个函数: 既然已经在getInitialState属性里申明了一个变量inp ...

  6. ubuntu 安装redis两种方式 教程

    方式一: 下载地址:http://redis.io/download,下载最新文档版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://download.redi ...

  7. 基于hadoop的数据仓库工具:Hive概述

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类 ...

  8. HttpWebRequest-header设置

    http://www.cnblogs.com/yczz/archive/2012/06/01/2530484.html http://blog.csdn.net/htsnoopy/article/de ...

  9. 25+ Useful Selenium Web driver Code Snippets For GUI Testing Automation

    本文总结了使用Selenium Web driver 做页面自动化测试的一些 tips, tricks, snippets. 1. Chrome Driver 如何安装 extensions 两种方式 ...

  10. IOS 设置导航栏全局样式

    // 1.设置导航栏背景 UINavigationBar *bar = [UINavigationBar appearance]; [bar setBackgroundImage:[UIImage r ...