黑马软件工程师-IO流怎么创建文件
---------------------- android培训、java培训、期待与您交流! ----------------------
黑马程序员-IO流如何创建文件
IO流创建一个文件
流的概念和作用
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流用来操作设备间的数据传输,
Java对数据的操作是通过流的方式实现的。
IO流的分类
根据处理数据类型的不同分为:字符流和字节流
字节流的抽象基类:InputStream,OutputStream。
字符流的抽象基类:Reader,Writer。
根据数据流向不同分为:输入流和输出流
字符流和字节流
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别:
读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
处理对象不同:字节流能处理所有类型的数据(如图片、avi、mp3等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
输入流和输出流
对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
我们要用流对数据进行操作,首先我们要先有流,可以根据我们要操作的文件的类型进行选择使用的对象。
例如,我们要操作一个文本对象,创建一个名为hello.txt的文本文件,将“hello,java”存入到该文件中。
根据 题意我们知道,要操作的 是一个文本对象, 要使用到的是Writer类,在java帮助文档api中我们可以知道 ,Writer是一个抽象类,那么我们可以找找看Writer有没有子类可以实现对文本文件的操作,
我们会找到在Writer的子类中有一个专门用来操作文本对象 的子类FileWriter,那么,我们要先创建一个FileWriter类的对象,
FileWriter fr=new FileWriter("hello.txt");
我们根据给定的文件名创建一个FileWriter的对象,该对象一被初始化就必须要明确被操作文件,如果指定目录下不存在该文件的同名文件,则会创建一个新的文件,如果该文件名已经存在,那么原有的同名文件将会被创建的覆盖。
在FileWriter类中有一些从Writer类中继承过来的方法,在这里我们可以直接拿过来使用。
Write();该方法是用来写入数据,在Writer类中有很多重载的witer方法,可以实现多种数据类型的操作,如单个字符,字符数组,字符串等。
flush();该方法是用来刷新数据的,将写入的流中的数据刷新到文件中。
close():该方法是用来关闭流资源的,该方法有一个特点,就是在关闭流之前进行一次刷新操作,其底层就是调用的flush方法。因为关闭资源的操作是必须要执行的,所以将其代码放到finally中。
具体代码如下:
import java.io.*;
class IO
{
public static void main(String[] args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("hello.txt");
fw.write("hello,java");
fw.flush();
}
catch(IOException e)
{
throw new RuntimeException("写入失败");
}
finally
{
try
{
if(fw != null)
fw.close();
}
catch(IOException e)
{
throw new RuntimeException("关闭失败");
}
}
}
}
若是已经有了一个文件,要对文件进行续写,一额可以用这种方法实现,只是创建刘对象的时候要进行区分,在FileWriter类中有多个构造方法
public FileWriter(String fileName, boolean append)
throws IOException根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
参数:
fileName - 一个字符串,表示与系统有关的文件名。
append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
如下面的例子,将abc续写到hello.txt的结尾处。
import java.io.*;
class IO5
{
public static void main(String[] args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("hello.txt",true);
fw.write("abc");
fw.flush();
}
catch(IOException e)
{
throw new RuntimeException("写入失败");
}
finally
{
try
{
if(fw != null)
fw.close();
}
catch(IOException e)
{
throw new RuntimeException("关闭失败");
}
}
}
}