【java开发系列】—— java输入输出流
前言
任何语言输入输出流都是很重要的部分,比如从一个文件读入内容,进行分析,或者输出到另一个文件等等,都需要文件流的操作。这里简单介绍下reader,wirter,inputstream,outputstream的使用方法。其实Apache commons里面有个方法IOUtils可是实现方便快捷的流拷贝,感兴趣的可以参考官方文档。
JAVA的输入输出流有两种,一种是字节流(InPutStream,OutPutStream),一种是字符流(Reader,Writer)。
字节流是普遍适用的,比如我们读取一个视频,音乐,或者文本都可以用这种方式。
字符流只能读取类似文本这种文件。那么它们之间是什么关系呢?看下面这张图吧!
大致可以看到它们之间的关系,我们可以使用InPutStreamReader来实现字节流到字符流的转换。比如
- Reader reader = new InputStreamReader(new FileInputStream(fileName));
也可以使用OutPutStreamWriter来实现字节流到字符流的转换,如
- Writer writer = new OutputStreamWriter(new FileOutputStream(filePathName));
下面简单介绍下,文件读取和文件写入的样例!
按行读取文件!
- /**
- * 以行为单位读取文件,常用于读面向行的格式化文件
- *
- * @paramfileName:文件名
- */
- public static List<String> readFileByLines(String fileName) {
- List<String> list = new ArrayList<String>();
- if (fileName != null && !"".equals(fileName)) {
- File file = new File(fileName);
- BufferedReader reader = null;
- try {
- System.out.println("以行为单位读取文件内容,一次读一整行:");
- reader = new BufferedReader(new FileReader(file));
- String tempString = null;
- /* 一次读入一行,直到读入null为文件结束 */
- while ((tempString = reader.readLine()) != null) {
- System.out.println(tempString);
- list.add(tempString);
- }
- } catch (IOException e) {
- System.out.println("读取文本文件异常" + e);
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e1) {
- System.out.println("读取文本文件异常" + e1);
- }
- }
- }
- }
- return list;
- }
向文件中写入内容,直接覆盖掉原来的内容。
- /**
- * 把内容写到文件
- *
- * @paramfilePathName文件名
- * @paramList<String>文件内容
- */
- public static boolean writerFile(String filePathName, String content) {
- boolean flag = false;
- OutputStreamWriter osw = null;
- try {
- if (filePathName != null && !"".equals(filePathName)) {
- osw = new OutputStreamWriter(new FileOutputStream(filePathName));
- }
- } catch (FileNotFoundException e1) {
- flag = false;
- e1.printStackTrace();
- }
- if (osw != null) {
- BufferedWriter bw = new BufferedWriter(osw);
- try {
- if (content != null && !"".equals(content)) {
- bw.write(content);
- flag = true;
- }
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- } finally {
- try {
- bw.close();
- osw.close();
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- }
- }
- }
- return flag;
- }
向文件中追加内容,追加到末尾。
- /**
- * 把内容写到文件或追加到文件中
- *
- * @paramfilePathName文件名
- * @paramList<String>文件内容
- */
- public static boolean writerFileIsAppend(String filePathName, String content) {
- boolean flag = false;
- OutputStreamWriter osw = null;
- try {
- if (filePathName != null && !"".equals(filePathName)) {
- osw = new OutputStreamWriter(new FileOutputStream(filePathName,
- true));
- }
- } catch (Exception e1) {
- flag = false;
- e1.printStackTrace();
- }
- if (osw != null) {
- BufferedWriter bw = new BufferedWriter(osw);
- try {
- if (content != null && !"".equals(content)) {
- bw.write(content);
- flag = true;
- }
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- } finally {
- try {
- bw.close();
- osw.close();
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- }
- }
- }
- return flag;
- }
全部代码
- package testIO;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.Reader;
- import java.util.ArrayList;
- import java.util.List;
- public class testIO {
- public static void main(String[] args) {
- readFileByBytes("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
- readFileByChars("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
- readFileByLines("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt");
- writerFile("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt",
- "BufferedWriter");
- writerFileIsAppend("C:\\Users\\Administrator\\Desktop\\新建文本文档.txt",
- "Append");
- }
- /**
- * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
- *
- * @paramfileName:文件的名
- */
- public static void readFileByBytes(String fileName) {
- File file = new File(fileName);
- InputStream in = null;
- try {
- System.out.println("以字节为单位读取文件内容,一次读多个字节:");
- /* 一次读多个字节 */
- byte[] tempbytes = new byte[100];
- int byteread = 0;
- in = new FileInputStream(file);
- /* 读入多个字节到字节数组中,byteread为一次读入的字节数 */
- while ((byteread = in.read(tempbytes)) != -1) {
- for (byte b : tempbytes) {
- System.out.println((char) b);
- }
- System.out.println(byteread);
- }
- } catch (Exception e1) {
- System.out.println("读取文本文件异常" + e1);
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e1) {
- System.out.println("读取文本文件异常" + e1);
- }
- }
- }
- }
- /**
- * 以字符为单位读取文件,常用于读文本,数字等类型的文件
- *
- * @paramfileName:文件名
- */
- public static void readFileByChars(String fileName) {
- Reader reader = null;
- try {
- System.out.println("以字符为单位读取文件内容,一次读多个字节:");
- /* 一次读多个字符 */
- char[] tempchars = new char[100];
- int charread = 0;
- if (fileName != null && !"".equals(fileName)) {
- reader = new InputStreamReader(new FileInputStream(fileName));
- /* 读入多个字符到字符数组中,charread为一次读取字符数 */
- while ((charread = reader.read(tempchars)) != -1) {
- for (char c : tempchars) {
- System.out.println(c);
- }
- }
- }
- } catch (Exception e1) {
- System.out.println("读取文本文件异常" + e1);
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e1) {
- System.out.println("读取文本文件异常" + e1);
- }
- }
- }
- }
- /**
- * 以行为单位读取文件,常用于读面向行的格式化文件
- *
- * @paramfileName:文件名
- */
- public static List<String> readFileByLines(String fileName) {
- List<String> list = new ArrayList<String>();
- if (fileName != null && !"".equals(fileName)) {
- File file = new File(fileName);
- BufferedReader reader = null;
- try {
- System.out.println("以行为单位读取文件内容,一次读一整行:");
- reader = new BufferedReader(new FileReader(file));
- String tempString = null;
- /* 一次读入一行,直到读入null为文件结束 */
- while ((tempString = reader.readLine()) != null) {
- System.out.println(tempString);
- list.add(tempString);
- }
- } catch (IOException e) {
- System.out.println("读取文本文件异常" + e);
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e1) {
- System.out.println("读取文本文件异常" + e1);
- }
- }
- }
- }
- return list;
- }
- /**
- * 把内容写到文件
- *
- * @paramfilePathName文件名
- * @paramList<String>文件内容
- */
- public static boolean writerFile(String filePathName, String content) {
- boolean flag = false;
- OutputStreamWriter osw = null;
- try {
- if (filePathName != null && !"".equals(filePathName)) {
- osw = new OutputStreamWriter(new FileOutputStream(filePathName));
- }
- } catch (FileNotFoundException e1) {
- flag = false;
- e1.printStackTrace();
- }
- if (osw != null) {
- BufferedWriter bw = new BufferedWriter(osw);
- try {
- if (content != null && !"".equals(content)) {
- bw.write(content);
- flag = true;
- }
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- } finally {
- try {
- bw.close();
- osw.close();
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- }
- }
- }
- return flag;
- }
- /**
- * 把内容写到文件或追加到文件中
- *
- * @paramfilePathName文件名
- * @paramList<String>文件内容
- */
- public static boolean writerFileIsAppend(String filePathName, String content) {
- boolean flag = false;
- OutputStreamWriter osw = null;
- try {
- if (filePathName != null && !"".equals(filePathName)) {
- osw = new OutputStreamWriter(new FileOutputStream(filePathName,
- true));
- }
- } catch (Exception e1) {
- flag = false;
- e1.printStackTrace();
- }
- if (osw != null) {
- BufferedWriter bw = new BufferedWriter(osw);
- try {
- if (content != null && !"".equals(content)) {
- bw.write(content);
- flag = true;
- }
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- } finally {
- try {
- bw.close();
- osw.close();
- } catch (IOException e) {
- flag = false;
- e.printStackTrace();
- }
- }
- }
- return flag;
- }
- }
内容参考
http://www.2cto.com/kf/201206/136072.html
http://blog.csdn.net/liuhenghui5201/article/details/8292552
【java开发系列】—— java输入输出流的更多相关文章
- java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- JAVA之I/O 输入输出流详解
简 介 如何在Java中进行文件的读写,Java IO流是必备的知识.这篇博文主要为您带来Java中的输入输出流的内容,包括文件编码.使用File类对文件和目录进行管理.字节流和字符流的基本操作 ...
- Java修炼——文件字节输入输出流复制和缓冲流复制
一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...
- 【java开发系列】—— JDK安装
前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行j ...
- 【java开发系列】—— Tomcat编译报错
由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...
- Java开发系列-文件上传
概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...
- Java开发系列-JDBC
概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...
- Java面试系列--java基础
Java基础总结 JAVA中的几种基本数据类型是什么,各自占用多少字节. 八大基本数据类型,byte:8位,short:16位,int:32位,long:64位,float:32位,double:64 ...
随机推荐
- UVALive - 3942 左儿子trie DP
题意:白书P209 本题用普通字典树会更快,为了练习还是尝试再敲一遍左儿子-右兄弟字典树(其实就是字典树上开前向星) dp[i]为满足[i...len)的分配方案数,转移方程为dp[i]=sum{dp ...
- B - Toy Storage(POJ - 2398) 计算几何基础题,比TOYS多了个线段排序
Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing ...
- table加载慢
为了让大表格(table)在下载的时候可以分段的显示,就是说在浏览器解析html时,table是作为一个整体解释的,使用tbody可以优化显示,如果表格很长,用tbody分段,可以一部分一部分地显示, ...
- css 浮动元素居中
方法一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- TCP/IP协议分为哪四层,具体作用是什么。
TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP).文件传输协议(FTP).网络远 ...
- PIXI 太空玉兔游戏(6)
想法来源 出于练习看到这篇文章 没有什么难度 效果如下,接下来会用pixijs讲解如何实现 创建应用及舞台 HTML部分只创建标签引入 pixi.min.js 即可: <script ...
- python3初探
官方网站:https://www.python.org/ 类库大全:https://pypi.python.org/pypi 基础类库:https://docs.python.org/3/libr ...
- PyCharm常见用法
1.设置python运行版本: File-->Setting-->Project-->Project Interpreter 2.代码批量左移/右移一个tab: 鼠标选中行,Tab右 ...
- 记一次MongoDB性能问题
下面文章转载自火丁笔记,原作者描述了一次MongoDB数据迁移过程中遇到的性能问题及其解决方案,中间追查问题的方法和工具值得我们学习.下面是其原文: 最近忙着把一个项目从MySQL迁移到MongoDB ...
- 九度oj题目1153:括号匹配问题
题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4866 解决:2112 题目描述: 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见 ...