20170829 - A - Java文件操作
1 当前目录就是文件所在目录吗?
不是,Eclipse规定的当前目录为项目的根目录。
不同软件,平台规定了不同的当前目录。
2 表示目录时应该用 / 还是 \?
File.separator
2 File类有何权限?
* File用于表示文件系统中的一个文件或目录
* 1 访问该文件或目录的属性信息(名字,大小,修改时间)
* 2 操作文件或目录(创建,删除)
* 3 访问一个目录的子项。
* 但不能读取数据。
3 如何获取文件名?
file.getName()
4 如何获取文件的大小?获取的大小是什么单位?
long length = file.length()
字节。
5 如何获取修改时间?
long time = file.lastModified();
6 毫秒转化为年月日的思路是?
/*
* 使用simpleDateFormat
* 先将毫秒long值转化为Date型数据
* 再传入sdf
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日,H:mm:ss");
Date date = new Date(time);
String str = sdf.format(time);
System.out.println(str);
7 如何将long型毫秒数转化为date型数据?
Date date = new Date(time);
7 //当前目录默认可不写
File file = new File("text.txt");
//如何判断文件是否存在?
if(!file.exists()){
//如何创建文件?
file.createNewFile();
System.out.println("文件创建完毕");
}else{
System.out.println("文件已存在");
}
//如何删除文件?先判断文件存在。
if(file.exists()){
file.delete();
System.out.println("文件已删除");
}else{
System.out.println("文件不存在");
}
8 什么时候需要使用递归?
代码重新走一遍。
9 如何删除一个目录下所有文件(包含文件夹)
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
deleteFile(new File("a"));
}
public static void deleteFile(File file){
//第一个循环,自调用判断函数,进入下一层,判断完后再返回上一次并删除
if(file.isDirectory()){
File[] files = file.listFiles();
for(File f : files){
deleteFile(f);
}
files = file.listFiles();
System.out.println(files);
if(files.length == 0){
file.delete();
}
}else{
file.delete();
System.out.println("文件已删除");
}
/*方法2
if(file.isDirectory()){
File[] files = file.listFiles();
for(File f : files){
deleteFile(f);
}
file.delete();
//最后上一层,文件夹+文件,是文件夹,进入最后一层,无文件夹,
}
*/
}
}
10 笔试题:
买汽水,1元一瓶汽水,2空瓶可换一瓶汽水,3瓶盖换一瓶汽水,20元可换多少瓶
编写代码计算 1+2+...+100;在这段代码中不得出现for,while关键字。
(思路:限制不用循环,只能用递归了)
11 递归使用条件是什么?
递归解决在某段代码执行过程中需要整体所有代码重复执行时使用。
12 如何获取文件夹中满足条件的子项?
定义过滤器(直接新建FileFilter对象,实现accept方法),传入获取文件方法listFile()中。
File提供了一个重载的listFile方法,允许传入一个过滤器,该方法会返回满足条件的子项
该方法需实现accept方法,传入的是file,返回的是布尔类型,
将该方法传入获取方法中,则获取方法只会返回满足条件的文件。
File dirrr = new File(".");
FileFilter filter = new FileFilter(){
public boolean accept(File file){
String name = file.getName();
return name.endsWith("txt");
}
};
File[] files2 = dirrr.listFiles(filter);
for(File fff : files2){
System.out.println(fff.getName());
}
13 如何判断文件类型?
file.getName().endsWith("txt")
14 如何获取根目录
File mainDir = new File(".");
15 由于File可以表示文件及文件夹,如何判断获取的文件是文件还是文件夹?
File file = new File("a")
file.isFile()
file.isDirectory()
16 如何获取文件夹内所有文件?
File file = new File("dir")
file.listFiles()
17 如何删除文件或文件夹?
先判断文件是否存在。
if(file.exists()){
file.delete();
System.out.println("文件已删除");
}else{
System.out.println("文件不存在");
}
file.delete()
目录必须为空才能被删除。
dir.delete()
18 如何判断文件或文件夹是否存在?
file.exists()
dir.exists()
19 如何创建多级目录?
File dir2 = new File(
"a"+File.separator+
"b"+File.separator+
"c"+File.separator+
"d"+File.separator+
"e"+File.separator+
"f");
if(!dir2.exists()){
dir2.mkdirs();
System.out.println("目录已创建");
}else{
System.out.println("目录已存在");
}
20 如何创建文件?
先判断是否存在,再创建。
if(!file.exists()){
file.createNewFile();
System.out.println("文件创建完毕");
}else{
System.out.println("文件已存在");
}
21 如何创建目录?
先判断是否存在,再创建。
File dir = new File("demo");
if(!dir.exists()){
dir.mkdir();
System.out.println("目录已创建");
}else{
System.out.println("目录已存在");
}
22 如何获取文件修改时间?
long time = file.lastModified();
23 关于读写数据需要掌握的
读写数据不能用File类,必须实例化一个RandomAccessFile实例来链接到文件。(RandomAccessFile raf = new RandomAccessFile("raf.dat", "rw");)
当链接的文件不存在时,若设置模式为读写,则会新建该文件,若设置模式为只读,则会抛出文件不存在异常。
当操作为写入一个字节时,必须设置为读写模式,调用对象的write(int num)方法,传入一个int型数值,无返回值,写入的为该int型数值低八位在unicode中对应的值,因此写入范围不会跳出char型数据的范围(raf.write(97);)
当操作为读取一个字节时,必须设置为只读模式,调用对象的read()方法,返回一个int型对象(int d = raf.read();System.out.println(d);)
当操作为复制文件时,可分为两种复制方式,一是一个字节一个字节复制到新文件,二是同时复制多个字节(需通过字节数组装载),所谓复制,实际上就是
读取后写入到新文件中,因此新建一个链接到被复制对象的raf实例(需注意什么?),再新建一个复制到对象的raf实例,
方式1,每次读取一个字节,并写入到新文件中,用 != -1 来判断读取完毕。
RandomAccessFile raf = new RandomAccessFile("raf.dat", "r");
RandomAccessFile raf1 = new RandomAccessFile("raf1.dat", "rw");
int d = -1;
while((d = raf.read())!=-1){
raf1.write(d);
}
方式2,每次读取10k的数据,需先定义一个存放字节的byte型数组,在read方法中传入数组,在write方法中增加写入参数,起始下标,及结束坐标)
(raf.read(bs)该方法返回的是读取到的字节数,不同于raf.read()返回的是读取到的是字符的int型数据。)
RandomAccessFile raf = new RandomAccessFile("raf.mp4", "r");
RandomAccessFile raf1 = new RandomAccessFile("raf1.mp4", "rw");
byte[] bs = new byte[1024*10];
int len = -1;
while((len = raf.read(bs))!=-1){
raf1.write(bs,0,len);
}