1. File类的路径创建和构造函数
在文件的输入输出中,路径是必不可少的一部分;
public class FileText {
public static void main(String[] args) {
// 所有的地址在复制到Java中之后都会由\变成\\,这是因为对其进行了转义的结果;
String path1 = "E:\\JAVA WEB等软件\\111.jpg";
// 上面的path,也可以如下表示
String path2 = "E:/JAVA WEB等软件/111.jpg";
//还可以直接使用在File中定义的名称分隔符常量来表示;
String path3 = "E:"+File.separator+"JAVA WEB等软件"+File.separator+"111.jpg";
}
}
- public File(String pathname) { }:
通过第一个构造函数创建对象;
File file = new File(path1);
File file = new File("E:\\JAVA WEB等软件\\111.jpg");
- public File(String parent, String child) {} :第一个参数填写父类路径,第二个参数填写子类路径;
//这里的两个不同的对象,他们的路径最终指向是一样的;
File file = new File("E:\\JAVA WEB等软件","111.jpg");
File file1 = new File("E:\\JAVA WEB等软件","JAVA WEB等软件\\111.jpg");
- public File(File parent, String child) {}
//这两个对象的路径也是一样的;
File file = new File("E:\\JAVA WEB等软件\\web\\数据\\FileProgect\\111.jpg");
File file1 = new File(new File("E:\\JAVA WEB等软件\\web\\数据\\FileProgect"),"111.jpg");
- public File(URI uri) {}:最后一个填写的是uri,就像网址一样;
2. 相对路径和绝对路径
-
绝对路径:绝对路径就Windows系统来说就是有盘符的,例如D:,C:等;
-
相对路径:当不存在盘符时就是相对路径;比如:“JAVA WEB等软件\111.jpg”,相对路径的根目录相当于是当前目录;
3.File类中常用的方法;
以表格的形式表示:
方法名 | 方法介绍 |
---|---|
getName() | 获得文件的名称 |
getPath() | 获得文件的路径(要看你构建文件时使用的是什么路径就返回什么路径;) |
getAbsolutePath | 获得文件的绝对路径 |
getParent() | 返回一个父路径(如果没有,返回NILL) |
exists() | 判断文件是否存在(返回一个boolean型的值) |
isFile() | 判断是否为文件(返回boolean型) |
isDirectory() | 判断是否为目录(返回boolean型) |
length() | 返回文件大小 |
createNewFile() | 创建新的文件(但是当文件存在时就不会创建了,除此之外有些操作系统已经使用了的名称,如con,com等不能创建) |
delete() | 删除 |
mkdir() | 创建目录(上级目录必须存在,只创建子目录) |
mkdirs() | 创建目录,如果上级目录不存在,那么自动创建上级目录 |
list() | 取下一级的名称(只取下一级,而且这里的名称是指目录或者文件名) |
listFiles() | 这里取的是下级File对象 |
list()和listFile()方法我是这么理解的:
1. list()方法取出下一级的名称,但是只是一个String,也就是还必须要放到一个File中才能创建对象;
2. listFile()方法则是取出下一级的对象,就相当于已经把那个取出来的String b,使用new File(b)已经创建了对象,这样就可以直接调用与File类相关的方法了;
在第四部分有一个小事例,对listFile()方法进行了一个使用;
File file2 = new File("E:/con1");
try {
//创建文件,返回一个boolean值,成功是true,失败是false
boolean flag = file2.createNewFile();
//删除文件
file2.delete();
System.out.println(flag);
} catch (IOException e) {
e.printStackTrace();
}
4. 通过File类中的方法怎么获取文件夹的大小
//统计一个文件夹的大小
public class TextFile {
//之所以添加get()set()方法,是因为我把属性私有化了;
private long len=0;
private int count=0;
private int dircount=0;
public long getLen() {
return len;
}
public int getCount() {
return count;
}
public int getDircount() {
return dircount;
}
public void getFAD(File file) {
if(file.exists()&&file!=null) {
if(file.isFile()) {//如果这个路径指向的是文件,就直接加文件的大小
len+=file.length();
count++;
}else {//否则就是目录,就不断的用递归往下循环,直到遍历完整;
dircount++;//之所以是八个文件夹,是因为它本身的路径就是代表一个文件夹;
//这里的for循环取出的是file下级的对象,这些对象赋给f,然后再代入到getFAD()中去;
for(File f : file.listFiles()) {
getFAD(f);
}
}
}
}
public static void main(String[] args) {
TextFile tf = new TextFile();
File file = new File("E:/JAVA WEB等软件/web/数据/FileProgect");
tf.getFAD(file);
System.out.println(tf.getCount());
System.out.println(tf.getDircount());
System.out.println(tf.getLen());
}
}
以下是运行结果;
以下图片是文件夹属性
//这个方法可以获得一个文件夹中目录和文件数量有多少,
//意味着就可以将递归改成for循环;
public class textMYmind {
public static void main(String[] args) {
File file = new File("E:/TextFile");
String[] f = file.list();
System.out.println(f.length);
}
}
在这里简单的解释一下遍历文件的思想,每一次方法都只取一个路径进行判断是文件夹,还是文件,如果是文件就取大小,如果是文件夹就继续向下去取,已达到遍历的目的;
5. 编码(Encode)与解码(Decode)
编码:从字符串转变成字节;使用getBytes()方法;
解码;从字节在回归到字符串;
在UTF-8中一个中文占用三个字节;一个英文字符占用1个字节;想知道当前工程使用的是什么字符集,可以在工程名右击鼠标,找到Properties,里面的resource就可以看到工程的默认字符集;
//Java中默认使用的是工程的字符集;
public class textMYmind {
public static void main(String[] args) {
String s = "神秘的天";
byte[] b = s.getBytes();
System.out.println(b.length);//結果是12;
}
}
在UTF-16LE中,一个中文通常表示两个字节;当然一个英文也表示两个字节;
在GBK中,一个中文字符代表两个字节;一个英文字符代表一个字节;
乱码有许多的原因:
- 在解码的过程中,字节数不够,导致部分字节无法正常解码;
- 字符集不统一,比如传过来一个GBK,却用UTF-8去解码;
心得:想要最终不乱码,就一定要知道字节数的多少,还要知道之前编码时是使用的是什么字符集;