java I/O
2018-04-19 本文已影响0人
ticktackdong
一.文件/文件夹File
1.创建文件对象:
new File("absolutePath/Path");
new File(parentDir,fileName);
2.文件常用方法
f.exists();
f.isDirectory();
f.isFile();
f.length();
f.lastModified();
f.renameTo();
f.list();
File[] fs= f.listFiles();
f.getParent();
f.getParentFile();
f.mkdir();
f.mkdirs();
f.createNewFile();
f.listRoots();
f.delete();
f.deleteOnExist();
二.InputStream/OutputStream字节输入输出流
FileInputStream/FileOutputStream
示例代码
try {
// 准备文件lol2.txt其中的内容是空的
File f = new File("d:/lol2.txt");
// 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
byte data[] = { 88, 89 };
// 创建基于文件的输出流
FileOutputStream fos = new FileOutputStream(f);
// 把数据写入到输出流
fos.write(data);
// 关闭输出流
fos.close();
}
三.关闭流的方式
1.在try中关闭
如果文件不存在或者读取时出现问题将会转入catch语句导致关闭流的代码得不到执行
2.在finally中关闭
流的声明在try的外面(保证finally可以访问)+关闭之前判断是否为空+关闭时还需要再一次trycatch
3.在try()括号中关闭
四.字符流Reader/Writer
FileReader/FileWriter(这次用char数组来保存数据)
五.缓存流BufferedReader/PrintWriter,flush
读取和写入都可以暂时保存到缓存中等缓存满了再输出,flush用于不用等缓存满了立马把数据写入硬盘
BufferedReader可以一次读取一行
File f = new File("d:\dong");
try( FileReader fr = new FileReader(f);
BufferedReader bffR = new BufferedReader(fr)){
while(true){
String line = bffR.readLine();
if(null!=line)
sysout(line);
}
}
六.数据流DataInputStream/DataOutputStream
要用DataInputStream 读取一个文件,这个文件必须是由DataOutputStream 写出的,否则会出现EOFException,因为DataOutputStream 在写出的时候会做一些特殊标记,只有DataInputStream 才能成功的读取
File f =new File("d:/lol.txt");
try (
FileInputStream fis = new FileInputStream(f);
DataInputStream dis =new DataInputStream(fis);
){
boolean b= dis.readBoolean();
int i = dis.readInt();
String str = dis.readUTF();
System.out.println("读取到布尔值:"+b);
System.out.println("读取到整数:"+i);
System.out.println("读取到字符串:"+str);
}
File f =new File("d:/lol.txt");
try (
FileOutputStream fos = new FileOutputStream(f);
DataOutputStream dos =new DataOutputStream(fos);
){
dos.writeBoolean(true);
dos.writeInt(300);
dos.writeUTF("123 this is gareen");
}
七.对象流
对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘
一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口
八.System.in
1. try (InputStream is = System.in;) {
while (true) {
// 敲入a,然后敲回车可以看到
// 97 13 10
// 97是a的ASCII码
// 13 10分别对应回车换行
int i = is.read();
System.out.println(i);
}
}
2.Scanner 可以读行/整数
Scanner s = new Scanner(System.in);
while(true){
String line = s.nextLine();
System.out.println(line);
int a = s.nextInt();
}