一.文件流
1.简介
- 文件流:文件在程序中是以流的形式来操作的
- 流:数据在数据源(文件)和程序(内存)之间经历的路径
- 输入流:数据从数据源(文件)到程序(内存)的路径
- 输出流:数据从程序(内存)到数据源(文件)的路径
2.常用的文件操作
- 创建文件对象相关构造器和方法
new Flie(String,pathname)
new File(File parent,String child)
new File(String parent,String child)
createNewFile
- 代码实操
package com.java.io_;
import java.io.File;
import java.io.IOException;
public class NewFile1 {
public static void main(String[] args) throws IOException {
create01();
create02();
create03();
}
public static void create01() throws IOException {
String filePath = "src/com/java/io_/1.txt";
File file1 = new File(filePath);
file1.createNewFile();
System.out.println("文件创建成功");
}
public static void create02() throws IOException {
File ParentFile = new File("src/com/java/io_/");
String fileName = "2.txt";
File file = new File(ParentFile, fileName);
file.createNewFile();
}
public static void create03() {
String parentPath = "src/com/java/io_/";
String fileName = "3.txt";
File file = new File(parentPath, fileName);
try {
file.createNewFile();
System.out.println("创建成功~");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 目录的操作和文件的删除
mkdir
创建一级目录,mkdirs
创建多级目录,delete
删除空目录或文件- 代码实现:
import java.io.File;
public class NewFile2 {
public static void main(String[] args) {
info();
}
public static void info() {
File file = new File("src/com/java/io_/1.txt");
if(file.exists()){
System.out.println("文件存在");
if(file.delete()){
System.out.println("文件删除成功!");
}else{
System.out.println("文件删除失败");
}
}else{
System.out.println("文件不存在");
}
File file1 = new File("src/com/java/io_/1/2/3");
if(file1.isDirectory()){
System.out.println("目录存在!");
}else{
System.out.println("目录不存在!");
if(file1.mkdirs()){
System.out.println("目录创建成功");
}else{
System.out.println("目录创建失败");
}
}
}
}
3.常用方法
package com.java.io_;
import java.io.File;
public class NewFile2 {
public static void main(String[] args) {
info();
}
public static void info() {
File file = new File("src/com/java/io_/1.txt");
System.out.println("文件的名字" + file.getName());
System.out.println("文件的父级目录" + file.getParent());
System.out.println("文件的绝对路径" + file.getAbsolutePath());
System.out.println("文件的大小单位字节" + file.length());
System.out.println("文件的是否存在" + file.exists());
System.out.println("是不是一个文件" + file.isFile());
System.out.println("是不是一个目录" + file.isDirectory());
}
}
===========================================================================
文件的名字1.txt
文件的父级目录src/com/java/io_
文件的绝对路径/Users/houpengju/Desktop/java/Java2/src/com/java/io_/1.txt
文件的大小单位字节0
文件的是否存在true
是不是一个文件true
是不是一个目录false
二.IO流原理及流的分类
1.IO流原理
- i/o技术是非常实用的技术,用于处理数据传输,如读写文件。网络通讯等
- java程序中,对于数据的输入或输出操作是以流(stream)的方式进行
- java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
- 输入
input
读取外部数据(磁盘,硬盘等存储设备的数据)到程序(内存)当中 - 输出
output
将程序(内存)数据输出到存储设备当中
2. 流的分类
- 按操作数据单位的不同分为:字节流(8bit)操作二进制文件可以实现无损操作、字符流(按字符编码计算大小)
- 按数据流的流向:输入流、输出流
- 按流的角色的不同分为:节点流、处理流/包装流
抽象基类 | 字节流 | 字符流 |
---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
- java中IO流共涉及40多个类,实际上非常规则,都是以如上4个抽象基类派生的
- 由这四个类派生出来的子类名称都是以其父类名作为子类名后缀
三.字节流
1.字节输入流常用子类(InputStream)
1.1 FileInputStream 文件输入流
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class FileInputStream_ {
public static void main(String[] args) throws Exception {
FileInputStream fileInputStream = new FileInputStream(new File("src/com/java/io_/1.txt"));
int read1 =0;
byte[] buf = new byte[9];
while ((read1 = fileInputStream.read(buf)) != -1) {
System.out.print(new String(buf, 0, read1));
}
fileInputStream.close();
}
}
1.2 BufferedInputStream 缓冲字节输入流
1.3 ObjectInputStream 对象字节输入流
2.字节输出流常用子类(OutputStream)
2.1 FileOutputStream 文件输出流
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStream_ {
public static void main(String[] args) throws IOException {
String filepath= "src/com/java/io_/outputstream_/1.txt";
FileOutputStream outputStream = new FileOutputStream(filepath,true);
outputStream.write('h');
String str ="hello world";
outputStream.write(str.getBytes());
outputStream.write(str.getBytes(),0, 4);
outputStream.close();
}
}
2.2 BufferedOutputStream 缓冲字节输出流
2.3 ObjectOutputStream 对象字节输出流
3.输入输出流具体应用
3.1文件输入输出流拷贝文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("2.png");
FileOutputStream fos = new FileOutputStream("src/com/java/io_/file_/2.PNG");
byte[] bytes = new byte[1024];
int f = 0;
while ((f = fis.read(bytes)) != -1) {
fos.write(bytes, 0, f);
}
fos.close();
fis.close();
}
}
四.字符流
1.FileReader和FileWriter
- 因为代码类似就不演示了,无非是把byte变成了char,getbyte 变成toCharArray
- FileWriter使用后必须关闭或者刷新(flush)否则写入不到指定文件