输入和输出处理
什么是计算机文件
文件是一个广泛的概念。这里我们要提到的是计算机中的文件,计算机中的文件就是相关记录或放在一起的数据的集合
。有了它我们就可以将数据持续化存储
(“长期存储”)在磁盘、光盘内。
File类
构造方法
- File(String pathname) 直接根据字符串类型地址获取对应的文件对象
// 1.File(String pathname)
// File file = new File("d:/a.txt");
// File file = new File("d:\\a.txt");
- File(String parent,String child) 根据字符串类型的父路径和子路径获取对应的文件对象
// 2.File(String parent父路径,String child子路径)
// 通常应用于:你已经获取到了某个文件的父路径 然后只需要通过本构造即可实现路径自动拼接
// File file = new File("d:", "a.txt");
- File(File parent,String child) 根据文件类型的父路径和字符串类型的子路径获取对应的文件对象
// 3.File(File parent,String child)
// 通常应用于:你已经获取到了某个文件的父路径(File对象型的)....
File parent = new File("d:");
File file = new File(parent , "a.txt");
// 获取文件的字节数
System.out.println(file.length());
普通方法
- 获取文件的字节数:long length()
File file = new File("e://b.txt");
System.out.println(file.length());
// 输出结果:18(字节)
- 判断文件/文件夹是否存在:boolean exists();
File file = new File("e://b.txt");
System.out.println(file.exists());
// 输出结果:true
- 判断是否是文件:boolean isFile();
File file = new File("e://b.txt");
System.out.println(file.isFile());
// 输出结果:ture
- 判断是否是文件夹:boolean isDirectory();
File file = new File("e://b.txt");
System.out.println(file.isDirectory);
// 输出结果false
- 获取相对路径:String getPath(); // 你可以理解为 File构造传入什么路径 就得到什么路径
File file = new File("e:\Java\b.txt");
System.out.println(file.getPath());
// 输出结果:e:\b.txt
- 获取绝对路径:String getAbsolutepath(); // 如果File构造传入的是相对路径 则可以根据它找到对应的绝对路径,但是如果本身就是绝对路径 则直接显示。
File file = new File("e://b.txt");
System.out.println(file.getAbsolutePath());
// 输出结果:e:\Java\b.txt
- 创建文件:boolean createNewFile();
File file = new File("e:/kY.txt");
try {
if(file == null) {
file.createNewFile();
System.out.println("创建成功");
}else {
System.out.println("创建失败");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// 输出结果:创建成功
- 创建文件夹:boolean mkdir();
File file = new File("e:/kY");
if(file == null) {
file.mkdir();
System.out.println("创建成功");
}else {
System.out.println("创建失败");
}
// 输出结果:创建成功
- 删除文件/空文件夹:boolean delete();
File file = new File("e:/kY.txt");
if(file != null) {
file.delete();
System.out.println("删除成功");
}else {
System.out.println("删除失败");
// 删除成功
- 获取文件名称:String getName();
File file = new File("e:/kY.txt");
String f = file.getName();
System.out.println(f);
// 输出结果:kY.txt
- 获取文件夹的子目录:File[] listFiles();
File file = new File("e:");
File[] one = file.listFiles();
for (File file2 : one) {
System.out.println(file2);
//输出结果:e:\$RECYCLE.BIN
e:\a.txt
e:\Java
e:\System Volume Information
e:\tY.txt
流的分类
按照方向性分类:
输入流:(读) InputStream Reader
输出流:(写) OutPutStream Writer
按照处理单元
字节流:可以传输一切内容,包括音频、视频、图片、文本…
字节输入流
InputStream
字节输出流
OutputStream
字符流可传输文本内容 根据国家的不同进行相应的文字转换
字符输入流
Reader
字符输出流
Writer
基类是抽象类无法直接创建对象,所以需要找到对应的子类。
FileInputStream
FileOutPutStream
使用字节流实现文件复制
字节输入流FileInputStream
构造方法
FileInputStream(File file);
FileInputStream(String pathname);
常用方法:
- 读取一个字节数据:int read();
- 读取一个字节数组长度的字节数据 返回实际读取到的字节数量:int read(byte[] b);
- 读取输入流中从指定索引开始,指定长度的字节数据到字节数组中:int read(byte b,int offs,int len);
- 关流:void colse();
字节输出流FileOutputStream
构造方法
FileOutputStream(File file);
FileOutputStream(String path);
FileOutputStream(File/String file,boolean append); 如果为true表示可以追加数据 而不是覆盖数据
常用方法:
- void write(int b); 输出一个字节
- void write(byte[] b); 输出一个字节数组的内容
- void write(byte[] b,int offs,int len); 输出一个字节数组中的指定范围的内容
- void close(); 关流
文件的复制
public class Test {
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("e:/kY.txt");
fos = new FileOutputStream("d:/kY.txt");
// 读取数据
byte[] b = new byte[1024];
int len = 0;
while((len = fis.read(b)) != -1) {
// 写入数据,读取到多少写多少
fos.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
// 关流
}finally {
if(fos != null) {
fos.close();
}
if(fis != null) {
fis.close();
}
}
}
}