Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中。而字符流操作的最小单位则是字符。可以先看一下IO流的概述:

下面首先是通过字符流对文件进行读取和写入:

 1 package lib;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileNotFoundException;
6 import java.io.FileReader;
7 import java.io.FileWriter;
8 import java.io.IOException;
9 import java.io.PrintWriter;
10
11 public class Test {
12 // 定义文件路径
13 File f = new File("F:\\test.txt");
14 //字符流写入的方法
15 public String writeInFile() throws IOException{
16 String str = "";
17 String count = "";
18 try {
19 // 使用字符流对文件进行读取
20 BufferedReader bf = new BufferedReader(new FileReader(f));
21 while (true) {
22 //读取每一行数据并将其赋值给str
23 if ((count = bf.readLine()) != null) {
24 str += count;
25 } else {
26 break;
27 }
28 }
29 // 关闭流
30 bf.close();
31 } catch (FileNotFoundException e) {
32 e.printStackTrace();
33 }
34 return str;
35 }
36 //字符流读取的方法
37 public void getReader(){
38 try {
39 //其中true表示在原本文件内容的尾部添加,若不写则表示清空文件后再添加内容
40 PrintWriter pw=new PrintWriter(new FileWriter(f,true));
41 pw.write("测试输入字符串到文件中2");
42 pw.close();
43 } catch (IOException e) {
44 e.printStackTrace();
45 }
46 }
47 public static void main(String[] args) throws IOException {
48 Test test=new Test();
49 //将字符串输入到文件中
50 test.getReader();
51 //读取相对应的字符串
52 String str=test.writeInFile();
53 //将文件中内容在控制台输出
54 System.out.println("文件内容为:"+str);
55 }
56 }

上述代码的关键地方都有注释,就不再一一赘述了,主要就是在使用完流之后不要忘记关闭就好(行30,行42)

然后是通过字节流的方式对文件进行操作,将一个文件中的内容复制到另一个文件中:

 1 package com.file.test2;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8
9 public class TestFile2 {
10 //使用字节流读取并写入文件,将一个文件复制到另一个文件中
11 public static void main(String[] args) throws IOException {
12 //要复制的源文件
13 File f=new File("D:\\test.txt");
14 //目标文件
15 File f2=new File("D:\\test2.txt");
16 //定义一个byte类型的数组,用于存储读取到的内容
17 byte [] b=new byte[1024];
18 int length;
19 try {
20 //定义读取的流
21 FileInputStream in=new FileInputStream(f);
22 //定义输出到文件的流
23 FileOutputStream out=new FileOutputStream(f2);
24 //将文件内容输出到另一个文件中
25 while((length=in.read(b))!=-1){
26 out.write(b, 0, length);
27 }
28 out.close();
29 in.close();
30 } catch (FileNotFoundException e) {
31 e.printStackTrace();
32 }
33 }
34 }

在字节流的操作中,第13行的源文件必须存在,可以根据需要自行更改文件路径,只需要存在即可,否则会报文件找不到的错误,同时若想在控制台输出读取到的字节流的内容则可以在第27和28行之间加两句代码:in.read(b, 0, b.length);System.out.println(new String(b));

以上就是字符流和字节流的相关操作,其实代码不难,主要是自己的理解,相同的问题每个人都会有不同的理解方式,当然,对于我们编程人员来说,除了要多思考之外还要多动手。最后希望以上内容能对大家有所帮助

Java IO 字节流与字符流 (五)的更多相关文章

  1. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  2. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  3. Java IO 字节流与字符流 (二)

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...

  4. Java的字节流,字符流和缓冲流对比探究

    目录 一.前言 二.字节操作和字符操作 三.两种方式的效率测试 3.1 测试代码 3.2 测试结果 3.3 结果分析 四.字节顺序endian 五.综合对比 六.总结 一.前言 所谓IO,也就是Inp ...

  5. java中字节流与字符流的区别

    字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字 ...

  6. Java中字节流和字符流的比较(转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  7. java中字节流和字符流的区别

    流分类: 1.Java的字节流   InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先.2.Java的字符流  Reader是所有读取字符串输入流的祖先,而 ...

  8. java IO(三):字符流

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  9. Java中字节流和字符流复制文件

    字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...

随机推荐

  1. 爬虫项目 之(一) --- urllib 和 正则re

    from urllib import request,parse from time import sleep import re # 1.[数据的获取] # 封装一个函数,用于将url转化成一个请求 ...

  2. Python自动化测试-使用Pandas来高效处理测试数据

    一.思考 1.Pandas是什么? 功能极其强大的数据分析库 可以高效地操作各种数据集 csv格式的文件 Excel文件 HTML文件 XML格式的文件 JSON格式的文件 数据库操作 2.经典面试题 ...

  3. sqlserver常用简单语句

    1.增 插入内容 insert into <表名> (列1,列2,列3) values ('值1','值2','值3') 检索出的内容插入到另外一张表 insert into <表名 ...

  4. Django-rest_framework中利用jwt登录验证时,自定义返回凭证和登录校验支持手机号

    安装 pip install djangorestframework-jwt 在Django.settings中配置 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATIO ...

  5. LeetCode(47)Permutations II

    题目 Given a collection of numbers that might contain duplicates, return all possible unique permutati ...

  6. PAT顶级 1002. Business (35)

    PAT顶级 1002. Business (35) As the manager of your company, you have to carefully consider, for each p ...

  7. About SQL Server 2016 CPT2

    SQL Server 2016 CTP2已经发布,可以从以下主页进行下载. http://www.microsoft.com/en-us/server-cloud/products/sql-serve ...

  8. Codeforces Round #457 (Div. 2) B

    B. Jamie and Binary Sequence (changed after round) time limit per test 2 seconds memory limit per te ...

  9. TOMCAT加载两次war包(重复加载)

    一.问题描述 项目中通过配置Context节点docBase,使docBase指向项目的绝对路径,可以直接通过IP加端口访问,今日发现意外bug,项目中某个功能奇数次执行成功,偶数次执行失败.二.问题 ...

  10. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法

    Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...