求知讲堂_day012
求知讲堂_day012
/*
*.XXX()的均是用对象调用该方法
*普通函数的返回值大多不会标明,建议通过编译器之类的查看
*<变量类型 中文> 表面这有个变量,是啥类型,有啥含义
*[...] 包含的内容可用来替换???
*/
=======================================================================
一、File类
创建File对象
new File(<String 完整路径>)
new File(<String 父路径> , <String 子路径>)
new File(<String 相对路径>)
/*相对路径: 相对于你创建项目的根目录 , 在编译器中选择文件按alt +Enter 即可查看(Path属性)*/
Tips: File文件有重写.toString() , 调用输出时输出创建时指定的路径 , 但建议还是用.getPath()和.getAbsolutePath()获取文件路径.
1.查询硬盘中文件或文件夹属性
//获取文件/文件夹名称
.getName();
//获取new对象时的 路径 或 绝对路径
.getPath();
.getAbsolutePath();
//返回当前文件的父级目录
.getParent();
//获取文件最后修改日期(单位:ms)
.lastModified();
//获取文件长度(单位:字节)
.length();
//获取当前目录所有文件
-返回<String[] 文件名带后缀/文件夹名称 >
.list();
-返回<File[] >
.listFiles();
2.检测文件/文件夹
//判断是否存在.exist()
.exists();
//判断可读[Read]可写[Write].can???()
//判断是文件[File]还是文件夹[Directory].is???()
3.文件操作
//重命名文件或文件夹名称
.renameTo(<File >)
//创建文件(要先判断文件是否存在)
-1.先以新文件的路径创建一个File对象
-2.判断这个文件是否存在(.exists();)
-3.调用.createNewFile();(要抛出异常)
//创建文件夹(可一次创建多层的目录)
-1.先以新文件夹的路径创建一个File对象
-2.调用.mkdirs();
//删除文件(先判断是否存在)
-1.先判断这个文件是否存在(.exists();)
-2.调用.delete();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
实例1:File类递归遍历文件
首先,我们创建一个函数并接收一个File对象
之后,判断这个File是文件夹还是文件
-如果是文件则直接输出
-如果是文件夹则输出并用.listFields()获取该文件夹目录并判断返回来的File数组 非空且长度大于零则遍历这个数组并重复以上操作(调用我们创建的这个函数)
public void test(File file){
if(file.isFile()){
System.out.println(file.getAbsolutePath() + " 是文件");
}else{
System.out.println(file.getAbsolutePath() + " 是文件夹");
File[] fs = file.listFiles();
if(fs != null && fs.length > 0){
for(File ff : fs){
test(ff);//递归
}
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
=======================================================================
二、Java IO原理 及 使用流程
//输入:外存 -> 内存
//输出:内存 -> 外存
//字节流(8bit),字符流(16bit)
//在写入一个文件时,如果目录下有同名文件将被覆盖。
//在读取文件时,必须保证该文件已存在,否则出异常。
//字符流只适合操作内容时字符的文件
1.文件字节输入流
-1. 首先创建FileInputStream对象
-2. 创建一个byte数组用来存储读取得到的数据
-3. 调用.read(<byte[]>)读取文件中的数据
(.read()其返回值是每次读取数据的长度,当没有数据可读取时直接返回-1)
-4. 用.close()关闭FileInputStream对象
2.文件字节输出流
-1.首先创建FileOutputStream对象
-2.调用.write(<Byte[] 要写入的内容>) 将数据写到内存中
-3.调用.flush() 把内存数据刷到硬盘
-4.调用.close()关闭FileOutputStream对象
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
实例2:字节流复制文件
首先,创建文件字节输入流和文件字节输出流对象 和 用来存数据的byte数组
之后,边读边存(用.write(<byte[] > , <int 从数组哪个位置开始读> , <int 读取的长度>))
在然后就将内容刷到硬盘上
最后关闭所有流
public static void copyFile(String inPath, String outPanth){
try {
FileInputStream in = new FileInputStream(inPath);//读取的源文件
FileOutputStream out = new FileOutputStream(outPanth);//复制到哪里
byte[] b = new byte[100];
int len = 0;
while((len = in.read(b)) != -1){
out.write(b, 0, len);
}
out.flush();//把写到内存的数据刷到硬盘
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3.文件字符输入流
-1. 首先创建FileReader对象
-2. 创建一个char数组用来存储读取得到的数据
-3. 调用.read(<char[]>)读取文件中的数据
(.read()其返回值是每次读取数据的长度,当没有数据可读取时直接返回-1)
-4. 用.close()关闭FileReader对象
4.文件字符输出流
-1.首先创建FileWriter对象
-2.调用.write(<String 要写入的内容>) 将数据写到内存中
-3.调用.flush() 把内存数据刷到硬盘
-4.调用.close()关闭FileWriter对象
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
实例3:字节流复制文件
因为操作很近似就不说了
public static void copyFile(String inPaht, String outPath){
try {
FileReader fr = new FileReader(inPaht);
FileWriter fw = new FileWriter(outPath);
char[] c = new char[100];
int len = 0;
while((len = fr.read(c)) != -1){//读取数据
fw.write(c,0,len);//写数据到内存
}
fw.flush();
fw.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
=======================================================================

浙公网安备 33010602011771号