文件操作
File对象:文件和目录路径名的抽象表示
File对象:java本身不能直接操作文件,需要通过java虚拟机与操作系统进行联系,从而建立起java与文件之间的联系。因此,这里的File是个抽象的表示,可能存在、可能不存在、可能是文件、也可能是文件夹(目录)。
构建File对象
1、File(String pathname)
String path="E:/idea/IO_study/ThreadState.png";
//File(String pathname)
File src=new File(path);
2、File(String parent, String child)
File src=new File("E:/idea/IO_study","ThreadState.png");
File src=new File("E:/idea/","IO_study/ThreadState.png");
3、File(File parent, String child)
File src=new File(new File("E:/idea/IO_study"),"ThreadState.png");
完整代码
public class FileDemo01 {
public static void main(String[] args) {
String path="E:/idea/IO_study/ThreadState.png";
//1、构建File对象
//File(String pathname)
File src=new File(path);
System.out.println(src.length());
//2、构建File对象
//File(String parent, String child)
src=new File("E:/idea/IO_study","ThreadState.png");
src=new File("E:/idea/","IO_study/ThreadState.png");
System.out.println(src.length());
//3、构建File对象
//File(File parent, String child)
src=new File(new File("E:/idea/IO_study"),"ThreadState.png");
System.out.println(src.length());
//构建不存在文件
src=new File("tfp/a.png");
System.out.println(src.getAbsoluteFile());
}
}
API方法
名称及路径
1、getName():返回名称
2、getPath():返回路径,相对或者绝对
3、getAbsolutePath():返回绝对路径
4、getParent():返回父路径,不存在返回空
public class FileDemo02 {
public static void main(String[] args) {
File src=new File("E:\\idea\\IO_study\\ThreadState.png");
System.out.println("名称:"+src.getName());
System.out.println("路径:"+src.getPath());
System.out.println("绝对路径:"+src.getAbsolutePath());
System.out.println("父路径:"+src.getParent());
System.out.println("父对象:"+src.getParentFile().getName());
}
}
文件状态
1、对象是否存在:isexists()
2、是否是文件夹:isDirectory()
3、是否是文件:isFile()
public class FileDemo03 {
public static void main(String[] args) {
File src=new File("E:\\idea\\IO_study\\ThreadState.png");
System.out.println("是否存在:"+src.exists());
System.out.println("是否是文件夹:"+src.isDirectory());
System.out.println("是否是文件:"+src.isFile());
System.out.println("-----------------");
src=new File("xxx");
if(null==src||!src.exists()){
System.out.println("文件不存在");
}else {
if(src.isDirectory()){
System.out.println("文件夹操作");
}else{
System.out.println("文件操作");
}
}
}
}
文件的长度
文件的长度:length()字节数
public class FileDemo04 {
public static void main(String[] args) {
File src=new File("E:\\idea\\IO_study\\ThreadState.png");
System.out.println("文件长度:"+src.length());
src=new File("E:\\idea\\IO_study\\ThreadState2.png");
System.out.println("文件长度:"+src.length());
}
}
文件的创建与删除
1、createNewFile():创建文件,不存在才创建
2、delete():删除文件
3、不能创建文件夹
4、对于像con,com3.....等这样的操作系统的设备名无法创建
public class FileDemo05 {
public static void main(String[] args) throws IOException {
File src=new File("E:\\idea\\IO_study\\io.txt");
boolean flag=src.createNewFile();
System.out.println("文件创建:"+flag);
flag=src.delete();
System.out.println("文件删除:"+flag);
}
}
目录的操作
创建目录
1、mkdir():确保上级目录存在,才可以创建
2、mkdirs():上级目录可以不存在,不存在一同来创建
public class DirDemo01 {
public static void main(String[] args) {
File dir=new File("E:/idea/IO_study/dir/test");
//创建目录mkdirs()
boolean flag=dir.mkdirs();
System.out.println(flag);
//创建目录mkdir()
dir=new File("E:/idea/IO_study/dir/test2");
flag=dir.mkdir();
System.out.println(flag);
}
}
子孙文件
1、list();列出下一级名称
2、listFile():列出下一级对象
3、列出所有盘符:listRoots()
public class DirDemo02 {
public static void main(String[] args) {
File dir=new File("E:/idea/IO_study");
//列出下一级名称
String [] subNmaes=dir.list();
for(String sname:subNmaes){
System.out.println(sname);
}
//列出下一级对象
File[] subFiles=dir.listFiles();
for(File sf:subFiles){
System.out.println(sf);
}
//列出所有盘符:listRoots()
File[] roots=dir.listRoots();
for(File rs:roots){
System.out.println(rs);
}
}
}
递归实现子孙文件列出
public class DirDemo03 {
public static void main(String[] args) {
File src=new File("E:/idea/IO_study");
printName(src,0);
}
private static void printName(File src,int deep) {
//控制前面层次
for(int i=0;i<deep;i++){
System.out.print("-");
}
//打印名称
System.out.println(src.getName());
if(null==src||!src.exists()){
return;
}else if(src.isDirectory()){
for(File s:src.listFiles()){
printName(s,deep+1);
}
}
}
}
//面向对象递归实现文件夹子孙级文件和文件夹的大小、个位
public class DirCount {
//文件大小
private long len;
//文件路径
private String path;
//文件的个数
private int fileSize=0;
//文件夹的个数
private int dirSize=-1;
//构造方法
private File src;
public DirCount(String path) {
this.path = path;
this.src=new File(path);
count(this.src);
}
private void count(File src) {
if(null!=src&&src.isFile()){
this.fileSize++;
len+=src.length();
}else{
this.dirSize++;
for(File s:src.listFiles()){
count(s);
}
}
}
public long getLen() {
return len;
}
public int getDirSize() {
return dirSize;
}
public int getFileSize() {
return fileSize;
}
public static void main(String[] args) {
DirCount dirCount=new DirCount("E:/idea/IO_study");
System.out.println(dirCount.getLen()+"--->"+dirCount.getDirSize()+"--->"+dirCount.getFileSize());
}
}
文件夹大小
public class DirDemo04 {
public static void main(String[] args) {
File src=new File("E:/idea/IO_study");
count(src);
System.out.println(dirlen);
}
private static long dirlen=0;
private static void count(File src) {
if(null!=src&&src.isFile()){
dirlen+=src.length();
}else{
for(File s:src.listFiles()){
count(s);
}
}
}
}
文件编码
编码与解码
编码:字符->字节
解码:字节->字符
编码:getBytes()
解码:new String()
字符集(大字典/码表)
常用字符集(每个字符集字符所占用的字节不同)
1、ASCII
2、utf-8(变长)
3、UTF-16BE(定长)
4、UTF-16(定长)
乱码
原因:
1、字节数不够
2、字符集不统一
//字节数不够
msg=new String(datas,0,data.length-2,"utf8");
msg=new String(datas,0,data.length-1,"utf8");
System.out.println(msg);
//字符集不统一
msg=new String(data,0,data.length-1,"gbk");
System.out.println(msg);