文件操作
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);
