黑马程序员技术交流社区
标题: IO流(File类和字节流) [打印本页]
作者: zjj5669436182 时间: 2017-12-18 21:54
标题: IO流(File类和字节流)
IO流(File类和字节流)
作者:一衡
今日主要学习了file类,和字节流的读取和复制,最难的案例为复制文档.
一、File类
1、构造方法
File(String pathname) :将一个字符串路径封装成File对象
File(String parent,String child):传入一个父级路径和子级路径
File(File parent,String child):传入一个File类型的父级路径和子级路径
2、删除功能
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean delete():删除文件或者删除单级文件夹。
删除文件只能一级一级删除。
3、判断功能
boolean exists():判断指定路径的文件或文件夹是否存在。
boolean isAbsolute():判断当前路路径是否是绝对路径。
boolean isDirectory():判断当前的目录是否存在。
boolean isFile():判断当前路径是否是一个文件。
boolean isHidden():判断当前路径是否是隐藏文件。
4、获取功能和修改功能
File getAbsoluteFile():获取文件的绝对路径,返回File对象
String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
String getName():获取文件或文件夹的名称
String getPath():获取File对象中封装的路径
long lastModified():以毫秒值返回最后修改时间
long length():返回文件的字节数
boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径。
5、其他功能
String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称
static File[] listRoots():获取计算机中所有的盘符
主要的代码
File很多的查找和统计,复制主要是以递归思想所表现的
static long sum = 0 ;
public static void printFile(File f, String s1, String s2) {
if (f.isDirectory()) {
File[] arr = f.listFiles();
for (File file : arr) {
if (file.isFile()) {
if (file.getName().endsWith(s1) || file.getName().endsWith(s2)) {
long chang = file.length();
sum += chang ;
System.out.println(file.getName());
}
} else {
//操作索引的子文件夹
printFile(file, s1, s2);
}
}
}
}
其中String s1 String s2 可以用String... s 替换可以查找多个后缀名的文件。
二、字符流和字节流
字符流前面IO已经学习
字符流
字节流代码:
public static void main(String[] args) throws IOException {
//创建字符输入流对象
FileReader fr = new FileReader("IODemo.java");
//创建字符输出流对象
FileWriter fw = new FileWriter("d:\\IODemo.java");
int len;//用于存储读到的字符个数
char[] chs = new char[1024];
while((len = fr.read(chs)) != -1) {
fw.write(chs,0,len);
fw.flush();
}
//释放资源
fw.close();
fr.close();
}
}
字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储
而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件
复制文档案例:
public class Demo {
public static void main(String[] args) throws IOException {
File scr = new File("F:\\PGP");
System.out.println(scr.getName());
File dir = new File("D:\\");
dir.mkdirs();
copy(scr,dir);
}
public static void copy(File scr ,File dir) throws IOException {
if(scr.isDirectory() && dir.exists()){
//创建目标目录
File newDir = new File(dir , scr.getName());
//如果不存在文件
if(!newDir.exists()) {
newDir.mkdir();
}
File[] files = scr.listFiles();
for (File file : files) {
if (file.isFile()) {
//创建输入流
FileInputStream fr = new FileInputStream(file);
//创建输出流想要的路径加上文件名
FileOutputStream fw=new FileOutputStream(new File(newDir,file.getName()));
//字节输入
byte[] bys = new byte[1024];
int len ;
while((len = fr.read(bys)) != -1){
fw.write(bys, 0, len);
}
fr.close();
fw.close();
}else if(file.isDirectory()){
//递归
copy(file, newDir);
}
}
}
}
}
作者: wheat 时间: 2017-12-18 22:38
不错哦
作者: 陈文老师 时间: 2017-12-19 08:49



作者: 1414225997 时间: 2017-12-19 09:13
这总结,杠杠的
作者: 渝小妹 时间: 2017-12-19 10:45
不错不错 杠杠的 加油 


作者: 花开的季节 时间: 2017-12-21 11:00
杠杠的 加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |