本文是基于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. Android应用开发-网络编程(二)(重制版)

    Apache HttpClient框架 GET方式请求提交数据 1. 创建一个HttpClient HttpClient hc = new DefaultHttpClient(); 2. 创建一个Ht ...

  2. [2014.01.27]wfPrintOcx 票据打印控件 v5.3

    支持选择打印机,并自动记忆选择的打印机. 适合打印各类票据格式. 支持画正方形.长方形.圆形.椭圆.横线.竖线.HTTP图片. 支持数字金额转换成中文大写金额. 可以设置固定宽度的文字自动换行. 组件 ...

  3. 优化Select 语句的原则

    优化Select 语句的原则 -摘抄<SQL Server 2005 性能监测与优化> Select 语句是数据库应用系统中最常用的语句之一,Select 语句设计的好坏直接影响到应用程序 ...

  4. Lua学习---Lua的控制结构

    前言 由于之前有c/c++.javascript基础,所以学Lua的时候喜欢拿来和前面的语言比较,这里主要和C比较 1.if...else Lua的if语句格式: if 条件 then 条件成立,运行 ...

  5. 基于Bootstrap、Jquery的自适应导航栏

    css代码: .kch_nav{width: 100%; position: fixed;z-index: 999;top:0;left: 0;right: 0;height: 69px;backgr ...

  6. keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...

  7. Using dojo/query(翻译)

    In this tutorial, we will learn about DOM querying and how the dojo/query module allows you to easil ...

  8. Nginx -- Gzip 压缩功能作用

    1.对应的压缩参数说明# 开启gzip压缩功能gzip on; # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取.默认值是0,不管页面多大都进行压缩,建 ...

  9. 使用log4net 日志输出到数据库MySQL

    使用Log4Net的输出日志到MySQL 使用步骤如下: 1. 添加引用Log4Net.dll, mysql.data.dll到工程中 note: mysql.data.dll 版本要高,最好到mys ...

  10. 禁用Windows窗体的关闭按钮

    1. protected override void OnFormClosing(FormClosingEventArgs e) { e.Cancel = true; base.OnFormClosi ...