Java笔记(12)-File类相关概述心得

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";
	}
}
  1. public File(String pathname) { }:

通过第一个构造函数创建对象;

File file = new File(path1);
File file = new File("E:\\JAVA WEB等软件\\111.jpg");
  1. 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");
  1. 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");
  1. 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去解码;

心得:想要最终不乱码,就一定要知道字节数的多少,还要知道之前编码时是使用的是什么字符集;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值