【Java学习笔记】22:查漏补缺2

来源:互联网 发布:mysql左外连接查询 编辑:程序博客网 时间:2024/05/29 19:45

垃圾回收和内存管理
利用JVM跨平面和垃圾回收是Java的两个重要特性,在Java中垃圾回收都由GC(garbage collection)来完成。
栈内存中:基本类型的变量和对象的引用变量。出了作用域后内存会自动释放。
堆内存中:new创建的对象和数组。由GC来释放,发现没有引用指向会自动释放。

File文件类(操作文件和目录的)
1.构造方法

package t1;import java.io.File;public class Test {    public static void main(String[] args) {        test1();    }    //创建File对象    private static void test1() {        //方法1:直接用路径建立File对象        String path="C:\\Users\\Shinelon\\Desktop\\sb.txt";//注意转义字符        File f1=new File(path);        //方法2:用父目录的File对象和文件名建立新File对象        File f2=new File("C:\\Users\\Shinelon\\Desktop");//父目录        File f3=new File(f2,"sb.txt");        //方法3:用父目录和文件名建立File对象        File f4=new File("C:\\Users\\Shinelon\\Desktop","sb.txt");    }}

2.路径分隔符和目录分隔符
在windows里路径分隔符是分号,目录分隔符是反斜杠。当我们用到Java跨平台开发时,不同平台下路径/目录分隔符是不一样的,java.io.File中提供了两个常量,它可以根据平台作自动的替换。

package t1;import java.io.File;public class Test {    public static void main(String[] args) {        test2();    }    //路径分割符和目录分隔符    private static void test2() {        //路径分隔符        System.out.println(File.pathSeparator);//字符串表示        System.out.println(File.pathSeparatorChar);//字符表示        //目录分隔符        System.out.println(File.separator);//字符串表示        System.out.println(File.separatorChar);//字符表示        //适合跨平台的写法        File f=new File("C:"+File.separator+"Users"+File.separator+"Shinelon"+File.separator+"Desktop"+File.separator+"sb.txt");        System.out.println(f.getAbsolutePath());    }}

在windows下运行结果:
;
;
\
\
C:\Users\Shinelon\Desktop\sb.txt
3.创建文件、临时文件、目录

package t1;import java.io.File;import java.io.IOException;public class Test{    public static void main(String[] args)    {        test3();    }    //创建文件    private static void test3()    {        File f=new File("C:"+File.separator+"Users"+File.separator+"Shinelon"+File.separator+"Desktop"+File.separator+"no.txt");        if(!f.exists())//如果文件不存在        {            //尝试创建它            try {                boolean b=f.createNewFile();                if(b)                    System.out.println("创建成功");                else                    System.out.println("创建失败");            } catch (IOException e) {                e.printStackTrace();            }        }    }}
package t1;import java.io.File;import java.io.IOException;public class Test{    public static void main(String[] args)    {        test3();    }    //创建临时文件(需提供前缀和后缀名)    private static void test3()    {        try {            File f=File.createTempFile("linshi",".txt");            System.out.println(f.getAbsolutePath());        } catch (IOException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }}

运行结果:
C:\Users\Shinelon\AppData\Local\Temp\linshi7735620275895343102.txt

package t1;import java.io.File;import java.io.IOException;public class Test{    public static void main(String[] args)    {        test3();    }    //创建目录    private static void test3()    {        File dir=new File("C:\\Users\\Shinelon\\Desktop\\a\\b\\c");//      dir.mkdir();//只能创建一级的        dir.mkdirs();//创建级联的目录a\b\c    }}

4.文件遍历

package t1;import java.io.File;import java.io.IOException;public class Test{    public static void main(String[] args)    {        test4();    }    //遍历文件    private static void test4() {        File f=new File("C:\\Users\\Shinelon\\Desktop");        File[] files=f.listFiles();        for(File p:files)//增强的for循环遍历整个数组        {            System.out.println(p.getAbsolutePath());        }       }}

部分运行结果:
这里写图片描述
5.文件的路径

package t1;import java.io.File;import java.io.IOException;public class Test{    public static void main(String[] args)    {        test5();    }    //文件的路径    private static void test5() {        File f1=new File(".\\f1.txt");        System.out.println(f1.getPath());//相对路径(构造方法中的路径)        System.out.println(f1.getAbsolutePath());//绝对路径(当前路径+构造方法中的路径)        try {            System.out.println(f1.getCanonicalPath());//规范路径        } catch (IOException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }    }}

6.文件属性

package t1;import java.io.File;public class Test{    public static void main(String[] args)    {        test6();    }    //文件属性    private static void test6() {        String path="C:\\Users\\Shinelon\\Desktop\\sb.txt";        File f=new File(path);        f.setReadOnly();//设置成只读        System.out.println("能读:"+f.canRead());        System.out.println("能写:"+f.canWrite());        System.out.println("能执行:"+f.canExecute());        System.out.println(f.getTotalSpace());//所在磁盘总大小        System.out.println(f.getFreeSpace());//所在磁盘剩余大小    }}

这里写图片描述
运行结果:
能读:true
能写:false
能执行:true
107374178304
50559721472

JavaI/O相关
1.流的分类
按照方向可以分为输入流和输出流,即以内存为参照物,从内存出去为写,从外部进到内存为读。
按照字节和字符可以分为字节流和字符流,字节即是每次读写1byte=8bit,字符即是char(一个char是两个byte)。如果用字节流来读汉字就会产生乱码,因为汉字是双字节的。如果是二进制形式的(如多媒体文件),用的都是字节流。
2.体系结构
这里写图片描述
3.核心方法
输入流即是读read(),输出流即是写write(),另外输入输出结束后都要作关闭close()。

原创粉丝点击