一、什么是I/O
我们正式的来学习IO流。那什么是IO流呢?其实我们身边就经常在用,比如说:QQ上传个图片,更改下图标,但凡涉及到文件传输了,都要用到它。接下来,我们就来揭晓它的庐山真面目。今天的内容分以下两块:File类的基本概述,File类的功能使用
回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。
当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
因此我们把这种输入和输出动作称为IO操作。
二、File类
File的概念
File类是文件和目录路径名的抽象表示形式
Java中把文件或者目录(文件夹)都封装成File对象
我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可
注:一般操作系统数据存在文件当中,有三种形式表示,文件,文件夹,路径。
java.io.File
将操作系统中的,文件,目录(文件夹),路径,封装成File对象
提供方法,操作系统中的内容
File与系统无关的类
文件 file
目录 directory
路径 path
**public static void main(String[] args) {**
//File类静态成员变量
//与系统有关的路径分隔符
String separator = File.pathSeparator;
System.out.println(separator);// 是一个分号,目录的分割 Linux :
//与系统有关的默认名称分隔符
separator = File.separator;
System.out.println(separator);// 向右 \ 目录名称分割 Linux /
}
FILE 构造方法
public static void main(String [] args){
File file = new File("d:\\eclipse");//斜线写俩个 因为一个报错了 会转意
System.out.println(file);//windows 操作系统不区分大小写 Linux区分
}
科普:
路径
绝对路径
在系统中具有唯一性
c:\windows\system32
相对路径
表示路径之间的关系
D:\develop\Java\jdk1.7.0_72\bin
D:\develop\Java\jre7
路径之间关系
Java 父目录是D:\develop
Java 子目录是:jdk1.7.0_72
父路径是 唯一性
子目录是可以多个
FILE其他的构造方法
/*
* File(File parent,String child)
* 传递路径,传递File类型父路径,字符串子路径
* 好处: 父路径是File类型,父路径可以直接调用File类方法
*/
public static void function_2(){
File parent = new File("d:");
File file = new File(parent,"eclipse");
System.out.println(file);
}
/*
* File(String parent,String child)
* 传递路径,传递字符串父路径,字符串子路径
* 好处: 单独操作父路径和子路径
*/
public static void function_1(){
File file = new File("d:","eclipse");
System.out.println(file);
}
File类创建文件功能
/*
* File创建文件的功能
* boolean createNewFile()
* 创建的文件路径和文件名,在File构造方法中给出
* 文件已经存在了,不在创建
*/
public static void function()throws IOException{
File file = new File("c:\\a.txt");
boolean b = file.createNewFile();
System.out.println(b);
}
File类创建目录功能
/*
* File创建文件夹功能
* boolean mkdirs() 创建多层文件夹
* 创建的路径也在File构造方法中给出
* 文件夹已经存在了,不在创建
*/
public static void function_1(){
File file = new File("c:\\abc");
boolean b = file.mkdirs();
System.out.println(b);
}
File类删除功能
/*
* File类的删除功能
* boolean delete()
* 删除的文件或者是文件夹,在File构造方法中给出
* 删除成功返回true,删除失败返回false
* 删除方法,不走回收站,直接从硬盘中删除
* 删除有风险,运行需谨慎
*/
public static void function_2(){
File file = new File("c:\\a.txt");
boolean b = file.delete();
System.out.println(b);
}
File类获取功能
a: 方法介绍
String getName(): 返回路径中表示的文件或者文件夹名
获取路径中的最后部分的名字
long length(): 返回路径中表示的文件的字节数
String getAbsolutePath(): 获取绝对路径,返回String对象
File getAbsoluteFile() : 获取绝对路径,返回File对象
eclipse环境中,写一个相对路径,绝对位置工程根目录
String getParent(): 获取父路径,返回String对象
File getParentFile(): 获取父路径,返回File对象
/*
* File类的获取功能
* String getParent() 返回String对象
* File getParentFile()返回File对象
* 获取父路径
*/
public static void function_3(){
File file = new File("d:\\eclipse\\eclipse.exe");
File parent = file.getParentFile();
System.out.println(parent);
}
/*
* File类获取功能
* String getAbsolutePath() 返回String对象
* File getAbsoluteFile() 返回File对象
* 获取绝对路径
* eclipse环境中,写的是一个相对路径,绝对位置工程根目录
*/
public static void function_2(){
File file = new File("src");
File absolute = file.getAbsoluteFile();
System.out.println(absolute);
}
/*
* File类获取功能
* long length()
* 返回路径中表示的文件的字节数
*/
public static void function_1(){
File file = new File("d:\\eclipse\\eclipse.exe");
long length = file.length();
System.out.println(length);
}
/*
* File类的获取功能
* String getName()
* 返回路径中表示的文件或者文件夹名
* 获取路径中的最后部分的名字
*/
public static void function(){
File file = new File("d:\\eclipse\\eclipse.exe");
String name = file.getName();
System.out.println(name);
/*String path = file.getPath();
System.out.println(path);*/
// System.out.println(file);
}
File类判断功能
boolean exists(): 判断File构造方法中封装路径是否存在
存在返回true,不存在返回false
boolean isDirectory(): 判断File构造方法中封装的路径是不是文件夹
如果是文件夹,返回true,不是文件返回false
boolean isFile(): 判断File构造方法中封装的路径是不是文件
如果是文件,返回true,不是文件返回false
/*
* File判断功能
* boolean isDirectory()
* 判断File构造方法中封装的路径是不是文件夹
* 如果是文件夹,返回true,不是文件返回false
*
* boolean isFile()
* 判断File构造方法中封装的路径是不是文件
*/
public static void function_1(){
File file = new File("d:\\eclipse\\eclipse.exe");
if(file.exists()){
boolean b = file.isDirectory();
System.out.println(b);
}
}
/*
* File判断功能
* boolean exists()
* 判断File构造方法中封装路径是否存在
* 存在返回true,不存在返回false
*/
public static void function(){
File file = new File("src");
boolean b = file.exists();
System.out.println(b);
}
File类list获取功能
String[] list():获取到File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
返回只有名字
File[] listFiles():获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
返回的是目录或者文件的全路径
static File[] listRoots(): 列出可用的文件系统根
public static void function_2(){
//获取系统中的所有根目录
File[] fileArr = File.listRoots();
for(File f : fileArr){
System.out.println(f);
}
}
/*
* File类的获取功能
* File[] listFiles()
* 获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
* 返回的是目录或者文件的全路径
*/
public static void function_1(){
File file = new File("d:\\eclipse");
File[] fileArr = file.listFiles();
for(File f : fileArr){
System.out.println(f);
}
}
/*
* File类的获取功能
* String[] list()
* 获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)
* 返回只有名字
*/
public static void function(){
File file = new File("c:");
String[] strArr = file.list();
System.out.println(strArr.length);
for(String str : strArr){
System.out.println(str);
}
}
递归遍历全目录
public static void main(String[] args) {
File dir = new File("d:\\eclipse");
getAllDir(dir);
}
/*
* 定义方法,实现目录的全遍历
*/
public static void getAllDir(File dir){
System.out.println(dir);
//调用方法listFiles()对目录,dir进行遍历
File[] fileArr = dir.listFiles();
for(File f : fileArr){
//判断变量f表示的路径是不是文件夹
if(f.isDirectory()){
//是一个目录,就要去遍历这个目录
//本方法,getAllDir,就是给个目录去遍历
//继续调用getAllDir,传递他目录
getAllDir(f);
}else{
System.out.println(f);
}
}
}