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

时间:2021-03-22 00:16:25

垃圾回收和内存管理
利用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());
}
}
}

部分运行结果:
【Java学习笔记】22:查漏补缺2
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());//所在磁盘剩余大小
}
}

【Java学习笔记】22:查漏补缺2
运行结果:
能读:true
能写:false
能执行:true
107374178304
50559721472

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