------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流和字符流
流按流分为:输入流和输出流
IO流常用基类:
字节流的抽象基类:
InputStream OutputStream
字符流的抽象基类:
Reader Writer
注:由这四个类派生出来的子类名称 都是以其父类名作为子类名的后缀 。
如:InputStream的子类FileInputStream
如:Reader的子类FileReader。
前缀名可以理解为该流对象的功能。
既然IO流是用于操作数据的,那么数据的最常见体现形式是:文件。
那么先以操作文件为主来演示。
需求:
在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的 Writer子类对象FileWriter。
FileWriter extends OutputStreamWriter
用来写入字符文件的便捷类。此类的构造方法假定默认的字符编码和
默认字节缓冲区都是可接受的。要自己制定这些值,可以先在FileOutputStream
上构造一个OutputStreamWriter。
FileWriter用于写入字符流。要写入原始字节流,考虑使用FileOutputStream。
==============================================================
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
/*
下面try catch finally有三个代码块,而关闭流操作需要访问FileWriter对象,那么需要
把建立引用放在异常处理的代码块之外,在try代码块中初始化,
否则放在try代码块中finally代码块无妨访问fw。
*/
FileWriter fw = null;
try {
/*
创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。
这一步就是在明确数据要存放的目的地。
*/
fw = new FileWriter("demo.txt");
/*
调用write方法,将字符串写入到流中。
*/
fw.write("over the rainbow");
/*
刷新流对象中的缓冲中的数据。将数据刷到目的地中。
*/
fw.flush();
} catch (IOException e) {
throw new IOException("文件名错误或文件路径错误或内存溢出");
}
finally
{
/*
关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。
和flush的区别:
flush刷新后,流还可以继续使用。
close刷新后,流会关闭。
*/
try {
fw.close();
}catch(IOException e){
throw new IOException("关闭流失败");
}
}
}
}
============================================================
异常处理:
/*
下面try catch finally有三个代码块,而关闭流操作需要访问FileWriter对象,那么需要
把建立引用放在异常处理的代码块之外,在try代码块中初始化,
否则放在try代码块中finally代码块无妨访问fw。
*/
java.io.FileNotFoundException: k:\demo.txt (系统找不到指定的路径。)
Exception in thread "main" java.lang.NullPointerException
at cn.itcast.IO.FileWriterDemo2.main(FileWriterDemo2.java:33)
出现了文件找不到异常,表明了文件创建失败。则fw的指向为null。在finally中一定会执行语句fw.close();
但是却无法调用close,这时,为了提高代码的健壮性,需要对它进行判断.
==============================================================
/*
演示 对已有文件的续写:
FileWriter的构造函数:
FileWriter(File file)
FileWriter(String fileName)
FileWriter(String fileName,boolean append)
根据给定的文件名以及提示是否附加写入数据的boolean值来构造FileWriter对象。
传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写。
FileWriter fw = new FileWriter("demo.txt",true);
\n 换行符
\r 回车符
*/
==============================================================
package cn.itcast.IO;
/*
第二种方式: 通过字符数组进行读取。
*/
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo2 {
public static void main(String[] args)
{
FileReader fr = null;
try {
fr = new FileReader("demo.txt");
/*
定义一个字符数组,用于存储读到的字符。
该read(char[] )返回的是读到字符个数。
*/
char[] buf = new char[1024];
int num = 0;
while((num = fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));;
}
} catch (FileNotFoundException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
fr.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流和字符流
流按流分为:输入流和输出流
IO流常用基类:
字节流的抽象基类:
InputStream OutputStream
字符流的抽象基类:
Reader Writer
注:由这四个类派生出来的子类名称 都是以其父类名作为子类名的后缀 。
如:InputStream的子类FileInputStream
如:Reader的子类FileReader。
前缀名可以理解为该流对象的功能。
既然IO流是用于操作数据的,那么数据的最常见体现形式是:文件。
那么先以操作文件为主来演示。
需求:
在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的 Writer子类对象FileWriter。
FileWriter extends OutputStreamWriter
用来写入字符文件的便捷类。此类的构造方法假定默认的字符编码和
默认字节缓冲区都是可接受的。要自己制定这些值,可以先在FileOutputStream
上构造一个OutputStreamWriter。
FileWriter用于写入字符流。要写入原始字节流,考虑使用FileOutputStream。
==============================================================
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
/*
下面try catch finally有三个代码块,而关闭流操作需要访问FileWriter对象,那么需要
把建立引用放在异常处理的代码块之外,在try代码块中初始化,
否则放在try代码块中finally代码块无妨访问fw。
*/
FileWriter fw = null;
try {
/*
创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。
这一步就是在明确数据要存放的目的地。
*/
fw = new FileWriter("demo.txt");
/*
调用write方法,将字符串写入到流中。
*/
fw.write("over the rainbow");
/*
刷新流对象中的缓冲中的数据。将数据刷到目的地中。
*/
fw.flush();
} catch (IOException e) {
throw new IOException("文件名错误或文件路径错误或内存溢出");
}
finally
{
/*
关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。
和flush的区别:
flush刷新后,流还可以继续使用。
close刷新后,流会关闭。
*/
try {
fw.close();
}catch(IOException e){
throw new IOException("关闭流失败");
}
}
}
}
============================================================
异常处理:
/*
下面try catch finally有三个代码块,而关闭流操作需要访问FileWriter对象,那么需要
把建立引用放在异常处理的代码块之外,在try代码块中初始化,
否则放在try代码块中finally代码块无妨访问fw。
*/
java.io.FileNotFoundException: k:\demo.txt (系统找不到指定的路径。)
Exception in thread "main" java.lang.NullPointerException
at cn.itcast.IO.FileWriterDemo2.main(FileWriterDemo2.java:33)
出现了文件找不到异常,表明了文件创建失败。则fw的指向为null。在finally中一定会执行语句fw.close();
但是却无法调用close,这时,为了提高代码的健壮性,需要对它进行判断.
==============================================================
/*
演示 对已有文件的续写:
FileWriter的构造函数:
FileWriter(File file)
FileWriter(String fileName)
FileWriter(String fileName,boolean append)
根据给定的文件名以及提示是否附加写入数据的boolean值来构造FileWriter对象。
传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写。
FileWriter fw = new FileWriter("demo.txt",true);
\n 换行符
\r 回车符
*/
==============================================================
package cn.itcast.IO;
/*
第二种方式: 通过字符数组进行读取。
*/
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo2 {
public static void main(String[] args)
{
FileReader fr = null;
try {
fr = new FileReader("demo.txt");
/*
定义一个字符数组,用于存储读到的字符。
该read(char[] )返回的是读到字符个数。
*/
char[] buf = new char[1024];
int num = 0;
while((num = fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));;
}
} catch (FileNotFoundException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
} finally {
try {
fr.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------