IO概念
IO是input和output的缩写,是对数据的流入和流出的一种抽象 ,java为了我们调用方便,抽象出的用于解决数据流动的类体系
流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。
File类
File类在java.Io包中
File类可以表示文件,也可以表示目录,在程序中一个File类对象可以代 表一个文件或目录
File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作。
file类的常用方法:
public static void main(String[] args) {
File file1 = new File("D:/课件/java");//绝对路径
System.out.println(file1.canExecute());//是否可执行
System.out.println(file1.canRead());//是否可读
System.out.println(file1.canWrite());//是否可写
System.out.println(file1.exists());//判断文件是否存在
System.out.println(file1.isFile());//判断是否为文件
System.out.println(file1.isAbsolute());//是否绝对路径
System.out.println(file1.isDirectory());//判断是否为目录
System.out.println(file1.getName());//获取文件名
try {
file1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
File[] fs = file1.listFiles();
for (File f : fs) {
if (f.isDirectory()) {//判断是否为目录
File[] fs2 = f.listFiles();//将目录下的子目录及文件的实例返回到File数组中
Arrays.stream(fs2).forEach((e) -> {
System.out.println(e);
});
}
System.out.println(f);
}
}
从数据流编码格式上可以分为:
1.字节流:InputStream和OutputStream(可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元为1个字节)
2.字符流:Reader和Writer(主要处理字符或字符串,字符流处理单元为1个字符)
按数据的传输方向可以分为:
1.输入流 2.输出流
字节流中常用类:FileInputStream,FileOutputStream
public static void main(String[] args) {
FileInputStream in = null;
FileOutputStream out = null;
int i = 0;
try {
in = new FileInputStream("D:/text.txt");
out = new FileOutputStream("D:/text1.txt");
i = 0;
while ((i = in.read()) != -1) {//读取文件
out.write(i);
}
} catch (FileNotFoundException e) {
System.out.println("找不到文件");
} catch (IOException e) {
System.out.println("无法读写文件");
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流中常用类:FileReader,FileWriter
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("D:/demo.txt");
FileWriter fileWriter = new FileWriter("D:/demo1.txt", true);
char[] chars = new char[5];
int size = 0;
BufferedReader bufferedReader = new BufferedReader(fileReader);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
String s = null;
while ((s = bufferedReader.readLine()) != null) {
bufferedWriter.write(s);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
}
print(打印流):只做输出没有输入打印流分为字节打印流和字符打印流
PrintWriter(字符打印流):print方法可以打印各种类型数据
对象输入输出流:ObjectOutputStream,ObjectInputStream;用于写入对象信息,读取对象信息一旦将对象信息写入到文件中,就可以做到持久化了
readObject()方法可以直接读取一个对象;writeObject()方法可以直接将对象保存到输出流中
对象序列化:
序列化: 将数据结构或对象转换成二进制字节流的过程,必须要实现 Serializable接口
反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程
Serializable接口中没有任何方法。当一个类声明实现Serializable接口后, 表明该类可被序列化