Java中的IO基础学习小记之一

IO流用来处理设备间的数据传送

Java对数据的操作是通过流的方式进行的

Java用于操作流的对象都在io包中

数据按照操作数据的方式分为两种:字节流和字符流

流按照流向分为:输入流和输出流

硬盘存储的数据时间长,断电后仍然存在

内存存数的数据时间短,断电后不存在。

硬盘读写数据慢,内存读取数据快

Java中IO的输入和输出是相对于内存的

从硬盘向内存中写数据,称为输入

从内存向硬盘中写数据,称为输出

外围设备包括  打印机,硬盘,U盘等

在计算机中,所有的数据都是按照二进制的形式存储的。

用于处理字节数据的数据流对象,称为字节流。----处理美国标准编码

用于处理字符数据的数据流对象,称为字符流。----为了统一编码而出现

一个文字在不同的编码表中,编码后的结果可能存在不一致的问题

用于读取字节流的数据流对象和编码方式相结合在一起,用来解决编码问题。

字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查编码表

获取对应的文字,再对文字进行操作处理

字符流 = 字节流 + 编码表

字节流的抽象基类:

InputStream输入流对象

OutputStream输出流对象

字符流的抽象基类

Reader输入流对象

Writer输出流对象

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀的。

四个类派生出来的子类的前缀名都是这个子类的功能。

要操作什么类型的文件,就找以该类型功能开头的文件操作类。

如 InputStream的子类 FileInputStream

Reader的子类FileReader

如果要操作文字数据,优先考虑字符流,而且要将数据从内存中写道硬盘上,

要使用字符流中的输出流 Writer

数据在硬盘中的基本体现是文件

import java.io.FileWriter;

import java.io.IOException;

class FileWriterDemo

{

public static void main(String[] args) throws IOException

{

//创建一个可以往文件中写入数据的字符输出流对象

/**既然是往文件中写入文字数据,那么在创建对象时,要操作的文件即必须是明确的。

如果文件不存在,则创建该文件;如果文件存在,则会创建并覆盖文件

*/

FileWriter fw = new FileWriter("test.txt");

//向文件中写入数据。调用的是Writer对象中的write(String)方法

fw.write("adfsfwerfwefsd");

//写完的数据存在缓冲区中。需要刷新缓冲区,才能把数据写入到文件中。

//写完一次数据就需要刷新一次缓冲区即flush()可以调用多次

fw.flush();

/**闭关输出流,输出前会刷新一次缓冲区。

流关闭时,最先打开的最后关闭,最后打开的最先关闭,即按照与打开顺序相反的顺序关闭。关闭流以后,不能再写入数据和刷新缓冲区

*/

fw.close();

}

}

Linux下换行是 \n

Windows下的换行是\r\n

获取系统中的换行标志

private static final String LINE_SEPARATOR = System.getProperty(“line.separator”);

向文件中追加数据

import java.io.FileWriter;

import java.io.IOException;

class FileWriterDemo

{

public static void main(String[] args) throws IOException

{

//创建一个可以往文件中写入数据的字符输出流对象

/**既然是往文件中写入文字数据,那么在创建对象时,要操作的文件即必须是明确的。

如果文件不存在,则创建该文件;如果文件存在,则会创建并覆盖文件

如果在构造函数中加入true,可以对文件进行续写

*/

FileWriter fw = new FileWriter("test.txt",true);

//向文件中写入数据。调用的是Writer对象中的write(String)方法

fw.write("adfsfwerfwefsd");

//写完的数据存在缓冲区中。需要刷新缓冲区,才能把数据写入到文件中。

//写完一次数据就需要刷新一次缓冲区

fw.flush();

//闭关输出流,输出前会刷新一次缓冲区。

fw.close();

}

}

自定义的类不要和Java.lang中提供的类重名,否则会导致Java.lang中提供的类在自定义类中无法使用

在文件操作中,只要进行文件的读写,就有肯能出现IOException

IO异常的简单处理

import java.io.FileWriter;

import java.io.IOException;

/**

IO异常的处理

对于每个部分的异常,都必须单独处理

关闭资源的语句写在finally语句中,资源在关闭时,必须判断是否为空。

如果不为空,则关闭资源,否则不用关闭资源。

在try语句中声明的变量,只在try语句中有效。

可以在try语句外声明变量,在 try语句中进行处理

流对象的处理方式:

在try语句外声明变量,在 try语句中进行处理

*/

class IOExceptionDemo

{

public static void main(String[] args)

{

FileWriter fw = null;

try{

fw = new FileWriter("test.txt",true);

}catch(IOException){

e.printStackTrace();

}finally{

if(fw != null)

try{

fw.close();

}catch(IOException){

e.printStackTrace();

}

}

}

}

字符读取流

需求:读取一个文件,将其中的字符打印到控制台

import java.io.FileReader;

import java.io.IOException;

class FileReaderDemo

{

public static void main(String[] args) throws IOException

{

//创建读取字符数据的流对象

/**在创建读取流时,必须要明确被读取的文件。

必须确保读取的文件是存在的

相当于用读取流关联一个已经存在的文件

*/

FileReader fr = new FileReader("test.txt");

/**用Reader中的read()方法读取数据

read()方法读取的是单个字符,读取一次,就返回一次

在字符可用、发生IO异常或者到达流的末尾前,此方法一直阻塞

返回

作为整数读取的字符,范围在0-65535之间,如果达到流的末尾

则返回-1

调用一次read就读取一次数据

读取完一次以后,下次在读取时,会从上次读取完的地方继续读取

*/

//int ch = fr.read();

//System.out.println((char)ch);

int ch;

while((ch = fr.read()) != -1){

System.out.print((char)ch);

}

/**

使用read(char[]buf)方法读取字符流,

如果流没有到达末尾,返回读取的字符数

如果流到达末尾,返回-1,并返回读取到字符数,并停止读取。

char[] buf = new char[1024];

int  num = fr.read(buf);

while(num != -1){

System.out.print(new String(buf,0,num));

}

*/

fr.close();

}

}

时间: 2024-10-10 23:57:06

Java中的IO基础学习小记之一的相关文章

java中的IO基础总结

java中的I/O类库设计可谓是比较丰富的,在我们平时的编程中也经常接触到,往往大部分的系统都有对IO操作的一些封装代码,平时要用到往往翻翻api或者找个写好的方法复制就搞定,由此带来的是对java本身提供的这些方法不熟悉,平时不好好梳理下,对java的io包下面这些常用类也就比较凌乱了.所以这里通过api文档和java.io下面的源码去整理下. 1.表示字节输入输出流的所有类的超类(InputStream/OutputStream) 构造方法:InputStream() 创建一个输入的stre

Java中的IO流之输入流|乐字节

亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入流 字节流和字符流的操作方式几乎完全一样,只是操作的数据单元不同而已 .字节流可 以操作所有文件,字符流仅操作纯文本. 1.抽象类:InputStream 和 Reader InputStream和Reader是所有输入流的基类,它们是两个抽象类,是所有输入流的模版,其中定义的方法在所有输入流中都可

Java中的IO流

Java中的IO流是实现输入/输出的基础. 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流 所有面向字节的流类都继承于InputStream类(输入流) 或OutputStream类(输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能. InputStream.OutputStream都是抽象类 InputStream抽象了应用程序读取数据的方式 OutputStream抽象类应用程序写出数据

Java中String的基础知识

Java中String的基础知识 ==与equal的区别 基本数据类型,指的是java中的八种基本数据结构(byte,short,char,int,long,float,double,boolean),一般的比较是使用的 ==,比较的是他们的值. 复合数据类型(类) ==比较的是两个对象的引用,可以理解为在内存中的地址,除非是同一个new出来的对象,他们的 ==为true,否则,都为false. equal是object中的方法.object中的实现如下,内部还是使用==实现,也就是说,如果一个

深入理解Java中的IO

深入理解Java中的IO 引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如下: Java IO概要 a.Java IO中常用的类 b.Java流类的类结构图 1.流的概念和作用 2.Java IO所采用的模型  : 3.IO流的分类 4.Java IO流对象 1.输入字节流InputStream 2.输出字节流OutputStream 3.字符输入流Reader 4.字符输出流Write

JAVA中各种IO的关系及说明

JAVA中的IO以前看着太混乱了,现在梳理一下 1.IO流分为两大类,一个是以stream结尾的,叫做字节流,顾名思义,按照byte为单位进行传输:另一种是以reader和writer结尾的叫做字符流,它貌似是封装了stream结尾的 IO流类,而产生的另一种功能类似,但是传输介质不再是byte,而是字符,也就是说,根据传说字符的不同,比如UTF-8,GBK等,它的传输单位也不是固定的. 2.输入输出,输入指的是从文件向内存中进行读入,输出指的是,内存中的内容写出到文件中 3.常见的Buffer

Java中的IO流总结

Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream.以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter. 3. 转换流InputStreamReader和OutputStreamWriter 一:流的继承关系 字节

Java NIO之Java中的IO分类

前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了,终于要说到了Java中的各种IO了.我也是边学边理解,有写的不对的地方,欢迎小伙伴们指出和补充. Java中的IO分类 BIO BIO是指 Blocking IO 在JDK1.0的时候就引入了,直到JDK1.4一直都是Java中唯一的IO方式.它的主要实现方式就是,一个线程执行一个请求,如果请求数

JAVA 中的IO流

Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的,字节流可以操作任意数据) 字符流:Reader,Writer.(字符流只能操作字符,但是在实际应用中字符流比较方便) 从操作来看又可以分为:输入流和输出流. 在进行IO流操作的时候分为以下几步:1.导入IO流的包,2.进行IO流的异常处理,3.关闭IO流释放资源. 字节流 ————————————