在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写。

一.字节流

下面是一个字节流的实例:

 import java.io.*;
public class IO {
public static void main(String[] args) {
System.out.println("现在利用Java的一个类读取一个数据已经定义好的数据");
FileInputStream fis=null;//利用这个函数写进来的是字节型读入而非字符型
FileOutputStream fos=null;//这个类是我们引入的IO包当中的类了,首先进行对象和引用变量的创建,后面使用了抛出异常的操作是为了让机器避免发生出错。
try
{
fis=new FileInputStream("F:/我自己编写的代码库/JAVA/src/from.txt");//后面引入参数,说明读取的文件的绝对路径,绝对路径里面有中文都居然成功了。
fos =new FileOutputStream("F:/我自己编写的代码库/JAVA/src/fromto.txt");
byte buffer[]=new byte[100];//这里定义比特二进制的数组,证明了我们使用的是字节型流,而不是字符型,字符型利用了其它的定义
int temp=fis.read(buffer,0,100);//第一:输入进来的必须是比特数组流。第二:开始进行输入的比特序列号,如第一个,第二个。第三:输入流的比特长度
for (int i=0;i<=99;i++)
{
System.out.println(buffer[i]);
}
fos.write(buffer,0,temp);//temp变量reveal了读入数据所接收到的字节的长度,这个正好是read函数的返回值
}
catch (Exception e)
{
System.out.println(e);//在改变了我们的读取数组长度之后,读取成功了,之前在for循环的地方越界了
}
} }

如果想读入一篇具有多个文字的文件的话,可以使用以下代码:

    import java.io.*;

 public class IO2 {
public static void main(String[] args) {
System.out.println("现在进行大型文件的读写");
FileInputStream fis1=null;
FileOutputStream fos1=null;
try
{
fis1=new FileInputStream("F:/我自己编写的代码库/JAVA/src/from1.txt");
fos1=new FileOutputStream("F:/我自己编写的代码库/JAVA/src/fromto1.txt");
byte buffer[]=new byte[1024];
while(true)
{
int temp=fis1.read(buffer,0,buffer.length);//read方法返回的是每次读取文件的字节数(比如a的asc码等)
if(temp==-1)//假设读到1024字节了,或者在1024字节之前就没有字节可读了,就会返回-1这个数值,然后跳出该循环,进行下一个循环
{
break;//这个程序在进行下一个循环的进入点在哪里呢?并没有提到,按道理来说是不会从刚刚已经读过的数据开始读,应该里面有一种自动读取的机制
}
fos1.write(buffer,0,buffer.length);
}
}
catch (Exception e)
{
System.out.println(e);
}
finally {
try{
fis1.close();
fos1.close();//在这里进行IO流的关闭,有开就有关,不然的话就会造成资源的浪费
System.out.println("读写完毕");
}
catch (Exception e)
{
System.out.println(e);
}
}
}}

注意前面创建对象的时候,我们创建的数组具有1024个字节,这是因为我们常常通过1024个字节进行读取,1024个字节正好等于了1个K,这样才可以对大文件当中的文字进行读写。最后我们在finally处,关闭了这个流,如果不关闭这个流的话,文件写入进去之后,是不会被保存下来的。

二.字符流

示例代码如下:

 mport java.io.*;
public class IO3 {
public static void main(String[] args) {
System.out.println("现在开始字符流型程序的编写");
FileReader fis2=null;
FileWriter fos2=null;
try {
fis2=new FileReader("F:/我自己编写的代码库/JAVA/src/from2.txt");
fos2=new FileWriter("F:/我自己编写的代码库/JAVA/src/fromto2.txt");
char buffer[]=new char[100];//字符流和字节流的区别就是这里,引入的对象buffer是字符型定义的是字符而不是二进制了。以及前面创建的两个对象分别是: FileReader和FileWriter。这就是两个不同的区别,其它的完全相同。
int temp=fis2.read(buffer,0,buffer.length);
for(int i=0;i<=99;i++)
{
System.out.println(buffer[i]);
}
fos2.write(buffer,0,buffer.length);
System.out.println("完成输入以及输出");
}
catch (Exception e)
{
System.out.println(e);
}
finally {
try{
fis2.close();
fos2.close();//只有关闭了输入输出流之后,输入进去的字节才会保存,不关闭的话,就仅仅会停留在内存当中不会保存的。这就是需要关闭的原因了。
}
catch (Exception e)
{
System.out.println(e);
}
}
}
}

读取大型文件的代码只需要根据和字节流进行相似的处理就可以进行读取大型文件了。

三.处理流

实例代码如下:

 import java.io.*;
public class IO4 {
public static void main(String[] args) {
System.out.println("现在开始处理流程序的书写\n");
FileReader a=null;
BufferedReader b=null;
try
{
String line=null;
a=new FileReader("F:/我自己编写的代码库/JAVA/src/from2.txt");
b=new BufferedReader(a);
while(true)
{
line=b.readLine();
if(line==null)
{
break;
}
System.out.println(line);//这里打印出了我们读取文件的内容,至于里面的内容为什么会像像这样打印,明天再来讲解。
}
}
catch (Exception e)
{
System.out.println(e);
}
}
}

上述代码还是比较容易理解的。

Java提高篇(二):IO字节流、字符流和处理流的更多相关文章

  1. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  2. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  3. (转)java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  4. java提高篇(二二)---LinkedList

    一.概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现.基于链表实现的方式使得L ...

  5. java提高篇(二九)-----Vector

    在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...

  6. java提高篇(二四)-----HashSet

          在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素. ...

  7. java提高篇(十七)-----异常(二)

          承接上篇博文:java提高篇-----异常(一) 五.自定义异常 Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表 ...

  8. java提高篇(二二)-----LinkedList

    摘自http://blog.csdn.net/chenssy/article/details/18099417  java提高篇(二二)-----LinkedList 一.概述 LinkedList与 ...

  9. Java提高篇(三二)-----List总结

    前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...

  10. Java提高篇(二六)-----hashCode

          在前面三篇博文中LZ讲解了(HashMap.HashSet.HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最 ...

随机推荐

  1. 基于python的WGS84转百度坐标

    from urllib.request import urlopen, quote import json def wgs84tobaidu(x,y): data=str(x)+','+str(y); ...

  2. python单元测试框架unittest总结

    unittest.TestCase:TestCase类,所有测试用例类继承的基本类. class BaiduTest(unittest.TestCase): TestCase类的属性如下: setUp ...

  3. Scyther-Semantics and verification of Security Protocol

    1 .本书前一节主要是介作者自己的生平经历(读完感觉作者是个神童),目标明确作者13岁代码已经写的很溜了.自己也开了网络公司,但是后面又专注于自己的计算机基础理论,修了哲学的博士学位(不得不说很多专业 ...

  4. ***CodeIgniter框架集成支付宝即时到账支付SDK

    本文为CI集成支付宝即时到账支付接口 1.下载支付宝官方demo ;即时到账交易接口(create_direct_pay_by_user)(DEMO下载) 原文地址:https://doc.open. ...

  5. 并发编程futuretask

    package com.mrbird.api.demoThread.thread1; /** * @Description * @Date: 2019/3/29 */ import java.util ...

  6. python打包工具 cx_Freeze介绍

    原理 Python 脚本在装有 Python 的系统中可以直接双击运行,但绝大多数普通用户并没有配置此类环境,而编译为可执行二进制文件后,用户无需预先安装 Python 及依赖库即可像运行普通程序一样 ...

  7. 升级android studio 3.4需要注意n事项

    1.在AS版本升级前建议关闭AS代理,以及关闭本地的一些代理工具,不然点击更新的时候会提示Connection failed (Read timed out). Please check networ ...

  8. 实验5 Spark SQL 编程初级实践

    源文件内容如下(包含 id,name,age),将数据复制保存到 ubuntu 系统/usr/local/spark 下, 命名为 employee.txt,实现从 RDD 转换得到 DataFram ...

  9. Ext使用中问题总结

    隐藏 Ext.form.DateField 的触发(trigger)元素使其内容不能修改并使其所有的文本框(text field)显示格式为Y-m-d items : [{ xtype : ' dat ...

  10. 【C语言编程练习】5.7填数字游戏求解

    之前的东西就不上传了,大致就跟现在的一样 1. 题目要求 计算 ABCD *  E DCBA 这个算式中每个字母代表什么数字? 2. 题目分析 如果是我们人去做这道题会怎么办,一定是这样想把,一个四位 ...