一.输入/输出流
文件类:File
字节流:InputStream:入 OutputStream:出
字符流:Reader:入 Writer:出
输入流
InputStream类是字节输入流的抽象类,所有字节流的父类。该类中所有方法遇到错误会引发IOException异常。
该类中有一些方法
read()
read(byte[] b)
mark(int readlimit)
reset()
skip()
输出流
二.File类
操作:创建或者删除
状态:文件是否存在或者隐藏
创建文件对象
new File(String Pathnname)
File file = new File(“d:/1.txt”)
new File(String parent,String child)
new File(File parent,String child)
例1:在D盘创建文本文件
import java.io.File;
public class FileTest {
public static void main(String[] args) {
File file = new File("D:\\word.txt");//创建文件对象
if(file.exists()) {//如果该文件存在
file.delete();//将文件删除
System.out.println("文件已删除");
}else {//如果文件不存在
try {
file.createNewFile();
System.out.println("文件已创建");
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
结果如下
例2:读取文本文件的名称、长度和隐藏属性
import java.io.File;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\word.text");//创建文件对象,两个斜杠是转义字符
if(file.exists()) {//exists:存在
String name = file.getName();//获取文件名称
long length = file.length();//获取文件长度
boolean hidden = file.isHidden();//判断文件是否隐藏
file.delete();//如果该文件存在
System.out.println("文件已删除");//将该文件删除
System.out.println("文件名称:"+name);
System.out.println("文件长度是:"+length);
System.out.println("该文件是隐藏文件吗?"+hidden);
}else {//如果文件不存在
try {
file.createNewFile();//try语句捕捉可能出现的异常:各种问题,处理或者抛出
System.out.println("文件已创建");//创建该文件
}catch(Exception e){
e.printStackTrace();
}
System.out.println("该文件不存在");
}
}
}
结果如下
三.文件输入/输出流
例3:向文本文件写入内容,再读取出来
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();
}
}
结果如下
package fifteenth;
import java.io.File;
public class File1 {
public static void main(String[] args) {
File file = new File("D:\\xinli");
printAllFiles(file);
}
//在方法里再次调用方法,递归算法
private static void printAllFiles(File file) {
// TODO Auto-generated method stub
File[] files = file.listFiles();
for( File f: files) {
if(f.isDirectory()){
printAllFiles(f);
}else {
System.out.println(f.getName());
}
}
}
}
结果如下
例4:使用字符流读写文本文件
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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);
BufferedWriter bw = new BufferedWriter(Writer);
Writer.write("申哭哭");
Writer.close();
//输入字节流
FileReader in = new FileReader(file);
char[] ch1 = new char[1024];
int len = in.read(ch1);
System.out.println(new String(ch1,0,len));
in.close();
}
}
结果如下
四.带缓存的输入/输出流
普通流转换为带缓存的流
1. BufferedInputStream和BufferedOutStream
例5:使用缓冲读写文本文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String content[] = {"好久不见","最近好吗","常联系"};//写入内容
File file = new File("D:\\word.txt");//创建文件对象
try {
FileWriter fw = new FileWriter(file);//文件字符输出流
BufferedWriter bw = new BufferedWriter(fw);//换成输出流
for(int k = 0;k < content.length;k++) {//遍历要写的内容
bw.write(content[k]);//写入字符串
bw.newLine();//写入一个换行符
}
bw.close();//关闭缓冲输出流
fw.close();//关闭文件字符输出流
}catch(IOException e) {
e.printStackTrace();
}
try {
FileReader fr = new FileReader(file);//文件字符输出流
BufferedReader br = new BufferedReader(fr);//缓冲输入流
String tmp = null;//作为缓冲的临时字符串
int i = 1;//行数
while((tmp = br.readLine())!= null) {
System.out.println("第"+i+"行:"+tmp);//输出读取的内容
i++;//行数递增
}
br.close();//关闭缓冲输入流
fr.close();//关闭文件字符输入流
}catch(IOException e) {
e.printStackTrace();
}
}
}
结果如下
//普通流
FileWriter writer = new FileWriter(file);
writer.write("门前大桥下,游过一群鸭");//调用方法,输入
writer.write("快来快来数一数,二四六七八");
writer.write("咕嘎咕嘎,真呀真多呀");
writer.write("数不清到底多少鸭");
//带缓存的流
BufferedWriter bw = new BufferedWriter(writer);
bw.write("门前大桥下,游过一群鸭");//调用方法,输入
bw.newLine();
bw.write("快来快来数一数,二四六七八");
bw.newLine();
bw.write("咕嘎咕嘎,真呀真多呀");
bw.newLine();
bw.write("数不清到底多少鸭");
bw.close();
五.数据输入/输出流
例6:使用数据流读写文本文件
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 DataSteamDemo {
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.25);
dos.writeInt(9);
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());
System.out.println(dis.readInt());
dis.close();
fis.close();
}
}
结果如下