15.1 输入/输出流
流是一组有序得数据序列,根据操作得类型,可分为输入流和输出流两种。
I/O(Input/Output,输入,输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。
15.1.1输入流
InputStream类是字节输入流得抽象类,它是所有字节输入流得父类。InputStream类得具体层次结构如图15.3所示.
15.1.2输出流
OutputStream类是字节输出流得抽象类,此抽象类是表示输出字节流得所有类得超类。
OutputStream类得具体
15.2File类
例题1
package 十五;
import java.io.File;
public class filetest {
public static void main(String[] args) {
File f =new File("D:\\word.txt"); //创建文件对象
if(f.exists()) { //如果该文件存在
f.delete(); //将文件删除
System.out.println("文件已删除");
}else { //如果文件不存在
try { //try语句捕捉可能出现得异常
f.createNewFile(); //创建该文件
System.out.println("文件已经创建");
}catch(Exception e) {
e.printStackTrace(); //输出异常性质
}}}}
例题2
package 十五;
import java.io.File;
import java.io.IOException;
public class filetest {
public static void main(String[] args)throws IOException {
File f =new File("D:\\word.txt"); //创建文件对象
if(f.exists()) { //如果该文件存在
String name =f.getName();//获取文件名称f.createNewFile(); //创建该文件
System.out.println("文件已经创建");
long length =f.length();//获取文件长度
boolean hidden =f.isHidden();//判断文件是否为隐藏文件
System.out.println("文件名称:"+name);
System.out.println("文件长度是:");
System.out.println("该文件是隐藏文件吗?");
}else {
f.createNewFile(); //创建该文件
System.out.println("文件已经创建");
}
f.delete(); //将文件删除
System.out.println("文件已删除");}}
文件名称:word.txt
文件长度是:0
该文件是隐藏文件吗? false
15.2.1文件得创建与删除
15.2.2获取文件信息
File类提供了很多方法获取文件本身的信息,其中常用的方法如表
15.3文件输入/输出流
程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存到文件中。
15.3.1FileInoutSteream与FileOutputStream类
例题3
package 十五;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileStreamDemo {
public static void main(String[] args)throws IOException {
File file =new File("D:\\word.txt"); //创建文件对象
FileOutputStream out =new FileOutputStream(file); //创建输出流
byte[] by= "Hello world".getBytes(); //写入内容的字节数组
out.write(by); //将字节写入文件中
out.close(); //关闭流
FileInputStream in =new FileInputStream(file); //创建输入流
byte[] by1= new byte[1024]; //缓存字节数组
int len =in.read(by1); //将文件信息读入缓存数组中
System.out.println(new String(by1,0,len)); //将字节转为字符串输出
in.close(); //关闭流
}}
15.3.2FileReader和FileWriter类
FileReade类he FileWriter类对应了FileInputStream类和FileOutStream类。FileWriter类顺序地读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余内容,知道源的末尾或流被关闭。
15.4带缓存得输入/输出流
例题4
package 十五;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws IOException{
File file =new File("D:\\word.txt"); //创建文件对象
FileWriter writer =new FileWriter(file); //创建输出流
char[] ch =new char[] {'h','a','o','!'}; //写入内容的字节数组
writer.write(ch); //将字节写入文件中
writer.close(); //关闭流
FileReader reader =new FileReader(file);
char[] ch1 =new char[1024];
int len =reader.read(ch1);
System.out.println(new String (ch1,0,len));
reader.close(); //关闭流
}
}
15.4.1BufferedInputStream与BufferedOutputStream类
BufferedInputStream类可以对所有InputStream类进行带缓存区的包装以达到性能的优化。
BufferedInputStream类有两个构造方法:
15.4.2BufferedReader与BufferedWriter类
BufferedReader类常用方法如下:
read()方法:读取单个字符。
readLine()方法:读取一个文本行,并将其返回为字符串。若无数据可读,则返回null。
BufferedWriter类的方法都返回void。常用方法
writer(String s,int off,int len)方法:写入字符串的某一部分.
flush()方法:刷新该流的缓存。
newLine()方法:写入一个行分隔符。
例题5
package fifte;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataStreamDemo {
public static void main(String[] args) throws IOException {
File file =new File("D:\\word.txt");
FileOutputStream fos=new FileOutputStream(file);
DataOutputStream dos=new DataOutputStream(fos);
dos.writeBoolean(false);
dos.writeUTF("你好世界");
dos.writeDouble(13.35);
dos.close();
fos.close();
FileInputStream fis=new FileInputStream(file);
DataInputStream dis=new DataInputStream(fis);
System.out.println(dis.readBoolean());
System.out.println(dis.readUTF());
System.out.println(dis.readDouble());
dis.close();
fis.close();
}
}
15.5数据输入/输出流
分别通过DataOutStream类的writeUTF()、writeDouble()、riteInt()和writeBoolean()方向指定的word.txt文件写入不同类型的数据,并通过DataIntputStream类的相应方法将写入的数据输出刀控制台上。
例题6
import java.io.*;
import java.io.File;
public class DataStreamDemo {
public static void main(String[] args) {
File file = new File("D:\\word.txt");
try {
FileOutStream fos =new FileOutStream(file);
DataOutStream dos =new DataOutStream(fos);
dos.writeUTF("使用UTF()方法写入数据");
dos.writeDouble(19.8);
dos.writeInt(298);
dos.writeBoolean(true);
dos.close();
fos.close();
FileInputStream fis =new FIleInputStream(file);
DataInputStream dis = new DataInputStream(fis);
System.out.println("UTF"+dis.readUTF());
System.out.println("Double"+dis.readDouble());
System.out.println("Int"+dis.readInt());
System.out.println("Boolean"+dis.readBoolean());
dis.close();
fis.close();
}catch(IOException e) {
e.printStackTrace();
}
}}
结果
readUTF 方法读取数据:使用writeUTF()方法写入数据
readDouble方法读取数据:19.8
readInt 方法读取数据:298
readBoolean方法读取数据:true