7.1概述
流是输入输出设备的一种抽象表示。
1.1 字节流
java.io包中的InputStream/OutputStream =>称为字节流,或二进制流
字节流分支:对象流、内存流、字节管道流、字节过滤流、音频流、图像流、二进制文件流、随机文件流。8分支
java.util.zip / java.util.jar 压缩流
javax.sound.sampled 音频流
javax.imageio 图像流
javax.xml.stream XML流
1.2 字符流
java.io包中Reader/Writer => 称为字符流
1.3 辨析输入输出流
一个读取字节序列的对象被称为输入流;一个可以写入字节序列的对象被称为输出流。以CPU为中心来判断,输入流就是从磁盘或内存读取数据到CPU,输出流就是CPU把数据写入内存或磁盘。
自理口诀:输入输出的是二进制,读写的是字符。(因为输入输出是机器的操作,读写是人的操作)。读进大脑是输入,大脑控制手写文章是输出。
2.1 File 类
文件对象,是对文件对象的管理,创建文件,移动文件,删除文件,目录,权限等,但是文件内容的读写不在这个类里面。
File在java.io.*里面;
构造函数:都是返回一个指定路径下文件的路径,不同的是文件路径组合。
File(path) => 绝对路径,/相对路径
File(File parent,filename) => 父目录对象+文件名,
File(String parent, filename) => 父目录是字符串 +文件名。
获取目录有两个方法:
public String getParent() => 返回父目录是字符串
public File getParentFile() => 返回父目录对象
文件组织结构入下图:
路径常用函数
获取绝对路径
public String getAbsolutePath() => 返回绝对路径,字符串
public File getAbsoluteFile() => 返回绝对路径,文件对象
import java.io.File;
public class File_Test {
public static void main(String[] args) {
File testFile2 = new File("..\\filecheck\\file2.txt");
String path2 = testFile2.getAbsolutePath();
System.out.println("获取绝对路径file2:\t" + path2.getClass());
File path21= testFile2.getAbsoluteFile();
System.out.println("获取绝对路径file2:的类型\t" + path21.getClass());
}
}
/*
获取绝对路径file2: class java.lang.String
获取绝对路径file2:的类型 class java.io.File
*/
获取文件名:getName(), 获取路径:getpath(),
获取路径文件夹下面的所有文件(包含目录):public String[] list()=>返回 文件名(字符串)
public File[] list() => 返回文件对象,每个对象是一个绝对路径
import java.io.File;
public class File_Test {
public static void main(String[] args) {
File testFile1 = new File("E:\\java\\interface_test\\filecheck\\file1.txt");//返回文件路径
File parent1 = testFile1.getParentFile();
String[] fileList = parent1.list();
System.out.println(parent1+"下面的所有文件名字(字符串):");
for(String i:fileList)
System.out.println(i);
File[] fileList1 = parent1.listFiles();
System.out.println(parent1 + "下面的所有文件对象是");
for(File i : fileList1)
System.out.println(i);
}
}
/*
E:\java\interface_test\filecheck下面的所有文件名字(字符串):
fdhfahd
file1.txt
file2.txt
file3.txt
E:\java\interface_test\filecheck下面的所有文件对象是
E:\java\interface_test\filecheck\fdhfahd
E:\java\interface_test\filecheck\file1.txt
E:\java\interface_test\filecheck\file2.txt
E:\java\interface_test\filecheck\file3.txt
*/
判断函数:
目录判断=> isDirectory()
文件判断=> isFile()
可读判断=>canRead()
可写判断=>canWrite()
路径存在判断=> exists()
是否隐藏判断=> isHidden()
import java.io.File;
public class File_Test {
public static void main(String[] args) {
File testFile1 = new File("E:\\java\\interface_test\\filecheck\\file1.txt");//返回文件路径
File parent1 = testFile1.getParentFile();
File[] fileList1 = parent1.listFiles();
System.out.println(parent1 + "下面的所有文件对象是");
for (File i : fileList1){
if (i.exists()){
if (i.isDirectory()){
System.out.print(i+"\t是一个目录。\t");
File[] file1 = i.listFiles();
if(!i.isHidden()) System.out.print("不是隐藏文件");
if (file1.length ==0) System.out.println("是空目录");
}
else if(i.isFile())
{
System.out.print(i + "\t是一个文件。");
if (i.canRead()) System.out.print("\t可读");
if(i.canWrite()) System.out.print("\t可写");
System.out.println();
}
}
else
System.out.println(i +"\t不存在!");
}
}
}
文件、目录,增、删:
createNewFile()增加,delet() 删除
mkdir()
mkdirs()
import java.io.File;
import java.io.IOException;
public class File_Test {
public static void main(String[] args) throws IOException {
File fileroute = new File("E:\\java\\interface_test\\geimefive");
if(fileroute.exists())
fileroute.mkdirs();
String filename = "testfile.txt";
File newone = new File(fileroute + File.separator + filename);
if(newone.exists()) newone.delete();
else
newone.createNewFile();
}
}