Java提高篇(二):IO字节流、字符流和处理流
在我们的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字节流、字符流和处理流的更多相关文章
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- (转)java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- java提高篇(二二)---LinkedList
一.概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现.基于链表实现的方式使得L ...
- java提高篇(二九)-----Vector
在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...
- java提高篇(二四)-----HashSet
在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素. ...
- java提高篇(十七)-----异常(二)
承接上篇博文:java提高篇-----异常(一) 五.自定义异常 Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表 ...
- java提高篇(二二)-----LinkedList
摘自http://blog.csdn.net/chenssy/article/details/18099417 java提高篇(二二)-----LinkedList 一.概述 LinkedList与 ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- Java提高篇(二六)-----hashCode
在前面三篇博文中LZ讲解了(HashMap.HashSet.HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最 ...
随机推荐
- Linux系统(虚拟机)安装禅道
1.查看linux系统版本 uname -a 2.禅道下载:http://www.zentao.net/download.html,找到要下载的版本,点击进入各平台下载: 3.将下载好的安装包上传到l ...
- Uncaught TypeError: Cannot read property ‘split’ of undefined
问题 :Uncaught TypeError: Cannot read property ‘split’ of undefinedat HTMLLIElement. split()切割的问题 因为遍历 ...
- C语言的数组指针
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element).数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存.以int arr[] = { 99, ...
- datatable 给某一列添加title属性
简单描述:采用datatable拼接的表格,没有title属性,嗯就是这个情况,直接上代码 代码: //js代码$("#toAdd").click("click" ...
- keepalived安装与配置,组建高可用服务器
一.准备环境 linux系统:CentOS7 keepalived版本:keepalived-1.3.5.tar.gz keepalived下载地址:http://www.keepalived.org ...
- Docker 学习9 Docker私有registry
一.docker registry分类 二.安装docker-hub提供的registry 1.安装 [root@localhost yum.repos.d]# yum install -y dock ...
- dos choice 命令
dos choice 命令 choice /c YNC /m "Are you sure?" if %errorlevel%==1 goto Y if %errorlevel%== ...
- 2019 蓝桥杯省赛 A 组模拟赛(一)-修建公路
题目: 蒜头国有 nn 座城市,编号分别为 0,1,2,3,...,n-1.编号为 x 和 y 的两座城市之间如果要修高速公路,必须花费 x|y 个金币,其中|表示二进制按位或. 吝啬的国王想要花最少 ...
- redis与memacache的区别(转)
redis和memecache的不同在于:1.存储方式:memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小redis有部份存在硬盘上,这样能保证数据的持久性.2.数据支持类 ...
- “Hello, my first blog”------第一篇博客的仪式感
本人在校大学生一枚,开通博客,主要是想记录自己的学习过程,分享自己的学习经历.记得大一的时候,很多不懂的操作和知识,都是在博客上找到了相应的解决办法.但比较讽刺的是,很多时候,曾经解决了的问题,当再次 ...