在我们的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. js-图片预加载

      //图片预加载 //闭包模拟局部作用于 (function($){ function Preload(imgs,options){ this.imgs = (typeof imgs === 'st ...

  2. Mac 下GitHub 访问慢解决方案

    1.GitHub下载是指向了Amazon的服务器 下载地址是http://github-cloud.s3.amazonaws.com/   解决方案是更改host文件,使该域名指向香港的服务器 2.去 ...

  3. margin:auto你真的理解么?

    含义 margin:auto是具有强烈计算意味的关键字,用来计算元素对应方向应该获得的剩余空间大小 填充规则 (1) 如果一侧定值,一侧auto,则auto为剩余空间大小 (2) 如果两侧均是auto ...

  4. 三丶JavaScript 的基础学习(一)

      知识预览 BOM对象 DOM对象(DHTML) 8 实例练习 JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言 ...

  5. element-ui对话框组件Dialog在回调事件opened获取组件滚动条scrollTop的问题

    今天使用element中的Dialog组件时发现一个问题:当Dialog内容过多时会出现滚动条,而当你滚动到一定位置后关闭Dialog,然后再次打开时滚动条仍然保持在上一次关闭前的位置而没有回到顶部. ...

  6. 实践笔记_J2EE_Server_Tomcat_tomcat域名绑定_1_单域名绑定

                                                                      Tomcat域名绑定(1)单域名绑定 1. 测试环境说明 名称 版本 ...

  7. python+selenium自动测试之WebDriver的常用API(基础篇一)

    基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.对浏览器操作 driver = webdriver.Chrome() # 初始化chrome driv ...

  8. Dapper+SqlServerCe部署

    C:\Program Files\Microsoft SQL Server Compact Edition\v4.0 目录下面 选择下面这 7 个 SQL Server Compact DLL,并复制 ...

  9. python tensorflow model

    step01_formula # -*- coding: utf-8 -*- """ 단순 선형회귀방정식 : x(1) -> y - y = a*X + b (a ...

  10. UOJ#7. 【NOI2014】购票 点分治 斜率优化 凸包 二分

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ7.html 题解 这题是Unknown的弱化版. 如果这个问题出在序列上,那么显然可以CDQ分治 + 斜率 ...