1.什么是流
2.File类的使用
代码如下:
package com_imooc.wenjian;
import java.io.File;
import java.io.IOException;
public class file_test {
public static void main(String[] args) {
//实例化一个file对象
File f=new File("E:\\项目\\mooc.txt");
File f1=new File("E:\\项目\\王二狗");
File f2=new File("E:\\项目\\王大狗\\李二蛋");
//创建文件
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
//创建目录
f1.mkdir(); //单级别目录
f2.mkdirs(); //多级别目录
//检查文件状态
System.out.println("文件是否是目录:"+f.isDirectory());
System.out.println("文件是否是文件:"+f.isFile());
System.out.println("文件是否是隐藏文件:"+f.isHidden());
System.out.println("文件路径是否真实存在:"+f.exists());
//删除文件或者目录
f1.delete();
}
}
3.字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
字节流分为两大类:1.InputStream;2.OutputStream;
3.1 InputStream
包含有:
我们这里暂先用FileInputStream作为参考:
实际的代码操作:
package com_imooc.wenjian;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class InputStream_test {
public static void main(String[] args) {
//创建文件
File f = new File("C:\\Users\\Administrator\\Desktop\\mooc.txt");
//读取信息(两种写法)
try {
FileInputStream info = new FileInputStream("C:\\Users\\Administrator\\Desktop\\mooc.txt");
FileInputStream info1 = new FileInputStream(f);
//1.读取了一个字节
int n = info.read();
System.out.println((char) n);
System.out.println("====================");
//2.赋值与字节数组读取
byte[] b = new byte[20];
info1.read(b);
System.out.println(new String(b));
System.out.println("====================");
//3.循环读取
while (n != -1) {
System.out.print((char) n);
n = info.read();
}
//最后关闭流
info.close();
info1.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.2 OutputStream
包含有:
我们这里暂先用FileOutputStream作为参考:
package com_imooc.wenjian;
import java.io.*;
public class OutputStream_test {
public static void main(String[] args) {
File f = new File("C:\\Users\\Administrator\\Desktop\\mooc1.txt");
try {
FileOutputStream info = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\mooc.txt");
FileInputStream fis1 = new FileInputStream("C:\\Users\\Administrator\\Desktop\\mooc.txt");
//true是做追加处理,不覆盖源文件
FileOutputStream info1 = new FileOutputStream(f, true);
FileInputStream fis = new FileInputStream(f);
//1.写入单个数据(清空数据后,重新编写)
info.write('a');
info.write('b');
System.out.println((char) fis1.read());
System.out.println((char) fis1.read());
System.out.println("=========================");
//2.写入多个数据;
String st = "cdefgh";
info.write(st.getBytes());
int n = fis1.read();
while (n != -1) {
System.out.println((char) n);
n = fis1.read();
}
System.out.println("=========================");
//3.选择性写入数据(选取字符1-4的字段)
info.write(st.getBytes(),1,4);
n = fis1.read();
while (n != -1) {
System.out.println((char) n);
n = fis1.read();
}
//最后关闭输入输出流
info.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.3 例题
我们采用的是copy的例子来进行代码的演示:
利用之前学习的字节流,来把图中1.png复制一份,并命令为2.png
package com_imooc.wenjian;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class wenjiankaobei {
public static void main(String[] args) {
try {
//1.创建流
FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\1.png");
FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\2.png");
//2.读入数据并写入流
byte[] b = new byte[1024];
int n = fis.read(b); //读入的数据暂存于字节b
while (n != -1) {
fos.write(b, 0, n);
n = fis.read(b);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.4 缓存流
package com_imooc.wenjian;
import java.io.*;
public class buffered {
public static void main(String[] args) {
File f = new File("C:\\Users\\Administrator\\Desktop\\mooc.txt");
try {
//1.创建字节流(输入输出)
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(f);
//2.创建缓存流(输入输出)
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//3.缓存输出流(write)
bos.write(11);
bos.write('a');
bos.write('b');
bos.write('c');
bos.write("defghi".getBytes());
bos.flush(); //刷新缓冲输出流
bos.close(); //关闭缓存输出流
//4.缓存输入流(read)
System.out.println(bis.read());
int n=bis.read();
while (n != -1){
System.out.println((char) n);
n=bis.read();
}
bis.close(); //关闭缓存输入流
//5.关闭字节流
fis.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
5.字节流和字符流的区别
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的Encode来处理,也就是要进行字符集的转化。这两个之间通过InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。