1、文件
1.1 创建文件的三种方式
@Test
public void create01() throws IOException {
String filePath = "f:\news.txt";
File file = new File(filePath);
file.createNewFile();
}
@Test
public void create02() throws IOException {
File file = new File("d:\");
String fileName = "news2.txt";
File file1 = new File(file, fileName);
file1.createNewFile();
}
@Test
public void create03() throws IOException {
String parentPath = "f:\";
String childPath = "news3.txt";
File file = new File(parentPath, childPath);
file.createNewFile();
}
1.2 获取文件相关信息方法
public void info(){
File file = new File("f:\news3.txt");
System.out.println("文件全路径:" + file.getAbsoluteFile()); // f:\news3.txt
System.out.println("文件名:" + file.getName());
System.out.println("父路径:" + file.getParent());
System.out.println("文件绝对路径 :" + file.getAbsolutePath());
System.out.println("是不是一个文件 : " + file.isFile());
System.out.println("是不是一个目录:" + file.isDirectory());
System.out.println("文件是否存在:" + file.exists());
System.out.println("文件内容字节数 :" + file.length());
}
2、IO 流
2.1 流的分类
2.1.1 InputStream
常用子类:
- FileInputStream:文件输入流
public void stream01() { // 抽象类 // OutputStream、InputStream、Reader、Write String filePath = "f:\hello.txt"; int len = 0; byte[] bytes = new byte[10]; FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream(filePath); while((len = fileInputStream.read(bytes)) != -1){ System.out.println(new String(bytes, 0, len)); } } catch (IOException e) { e.printStackTrace(); } finally { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } - BufferedInputStream:缓冲字节输入流
- ObjectInputStream:对象输入流
2.1.2 OutputStream 和 InputStream
public void objectStream() throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("f:\hello.txt"));
oos.write(100);
oos.writeObject(new Dog("小黄", 15));
oos.close();
}
public void objectInput() throws Exception{
ObjectInputStream oos = new ObjectInputStream(new FileInputStream("f:\hello.txt"));
System.out.println(oos.read());
System.out.println(oos.readObject().toString());
oos.close();
}
2.1.3 Reader
- BufferedReader
因为是包装类,所以需要传递一个字类给
BufferedReader
public void bufferedReaderStream() throws IOException {
String filePath = "f:\hello.txt";
BufferedReader bufferedReader = null;
bufferedReader = new BufferedReader(new FileReader(filePath));
String line;
while((line = bufferedReader.readLine()) != null){
System.out.println(line);
}
bufferedReader.close();
}
- BufferedInput
2.1.4 Write
- BufferedWrite
public void bufferedWrite() throws IOException {
BufferedWriter bufferedWriter = null;
bufferedWriter = new BufferedWriter(new FileWriter("f:\helloT.txt", true));
bufferedWriter.newLine();
bufferedWriter.write("李永奇");
bufferedWriter.close();
}
案例:使用 BufferedWrite 喝 BufferedReader 完成拷贝
public void bufferedReaderStream() throws IOException {
String filePath = "f:\hello.txt";
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
bufferedWriter = new BufferedWriter(new FileWriter("f:\helloT.txt", true));
bufferedReader = new BufferedReader(new FileReader(filePath));
String line;
while((line = bufferedReader.readLine()) != null){
bufferedWriter.newLine();
bufferedWriter.write(line);
}
bufferedReader.close();
bufferedWriter.close();
}
案例:使用 InputStream 和 OutputStream 完成图片拷贝
/**
* 完成图片拷贝
*/
public void copyImage() throws IOException {
String filePath = "f:\java.png";
String filePath2 = "f:\javaCopy.png";
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
int len = 0;
byte[] buf = new byte[1024];
try {
fileInputStream = new FileInputStream(filePath);
fileOutputStream = new FileOutputStream(filePath2);
while((len = fileInputStream.read(buf)) != -1){
fileOutputStream.write(buf);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
fileInputStream.close();
fileOutputStream.close();
}
}
2.2 节点流和处理流联系与区别
- 节点流是低级流,直接和数据源相连接
- 包装流来包装节点流,可以消除不同节点流(
只要是Reader的子类)的实现差异(FileReader、ObjectReader),也可以提供更方便的方法来完成输入输出 - 包装流对节点流进行包装,使用了
修饰器设计模式,不会直接与数据源相连接