Java——IO总结
Java——IO总结
1.文件
package day21.io;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws IOException {
//1.拼接字符串路径C:\\Users\\Administrator\\Desktop\\
String path="我曾是少年.docx";
//2.将字符串路径转换成File对象
File file=new File(path);
//File file1=new File("C:\\Users\\Administrator\\Desktop", "我曾是少年.docx");
//File file2=new File(new File("C:\\Users\\Administrator\\Desktop"), "我曾是少年.docx");
//3.读取文件属性信息
//读取文件名称
System.out.println("文件名称:"+file.getName());
//获取文件绝对路径、相对路径
System.out.println("绝对路径:"+file.getAbsolutePath());
System.out.println("相对路径:"+file.getPath());
System.out.println("父目录:"+file.getParent());
System.out.println("文件分区大小:"+file.getTotalSpace());//返回的是字节
System.out.println("所在空间可用空间:"+file.getFreeSpace());
System.out.println("判断文件是否存在:"+file.exists());
System.out.println("判断文件是否为绝对路径:"+file.isAbsolute());
System.out.println("判断文件是不是一个文件:"+file.isFile());
System.out.println("判断当前文件是否是隐藏文件:"+file.isHidden());
System.out.println("判断当前文件是否可执行:"+file.canExecute());
System.out.println("判断当前文件是否可读:"+file.canRead());
System.out.println("判断当前文件是否可写:"+file.canWrite());
System.out.println("抽象路径的哈希码:"+file.hashCode());
System.out.println("文件的上次修改时间:"+file.lastModified());
Date d=new Date(file.lastModified());
System.out.println(d);
System.out.println("文件的大小"+file.length());
//System.out.println(file.list());
//文件重命名
//file.renameTo(new File("名字.后缀名"));
File file1=new File("C:\\Users\\Administrator\\Desktop");
//创建目录
//System.out.println(file1.mkdir());//只能创建当前目录,不能创建父目录
//System.out.println(file.mkdirs());//创建当前目录的同时,如果父目录不存在,会创建父目录
//列出当前系统盘符
System.out.println("-------------------------");
File[]roots=File.listRoots();
for (File file2 : roots) {
System.out.println(file2);
}
//列出所有的文件名
System.out.println("------------------------------");
if (file1.exists()&&file1.isDirectory()) {
String[]name=file1.list();
for (String string : name) {
System.out.println(string);
}
}
//列出所有的文件对象
System.out.println("-----------------------------------");
if (file1.exists()&&file1.isDirectory()) {
File[]result=file1.listFiles();
for (File file2 : result) {
System.out.println(file2);
}
}
//打印当前目录下所有层级的文件信息
System.out.println("---------------------------------");
listAllFileInfo(file);
/*System.out.println("删除-------------------");
File file2=new File("C:\\Users\\Administrator\\Desktop\\111.txt");
file2.createNewFile();//创建新的文件
file2.delete();//立即删除
file2.deleteOnExit();//当虚拟机停止后删除
*/ }
//打印当前目录下所有层级的文件信息
public static void listAllFileInfo(File file) {
if (file.isDirectory()) {//测试此抽象路径名表示的文件是否为目录
File[]files=file.listFiles();
for (File file2 : files) {
//递归
listAllFileInfo(file2);
}
}else {
System.out.println(file);
}
}
}
输出结果:
1.1练习题
package day22.test;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
File file=new File("C:\\Users\\Administrator\\Desktop");
printAllFileInfo(file);
//对文件后缀名为txt的文件进行显示输出
System.out.println("-------------------------");
/*File []file4=File.listRoots();
for (File file2 : file4) {
printTxt(file2);
}*/
printTxt(file);
//批量修改文件名称
/*System.out.println("---------------------------");
File file1=new File("C:\\Users\\Administrator\\Desktop\\test\\one");
file1.mkdirs();
if (file1.isDirectory()&&file1.exists()) {
file1=new File(file1.getAbsoluteFile(),"123.java");
file1.createNewFile();
file1=new File(file1.getParent(),"123.txt");
file1.createNewFile();
}
File file2=new File("C:\\Users\\Administrator\\Desktop\\test\\two");
file2.mkdirs();
if (file2.isDirectory()&&file2.exists()) {
file2=new File(file2.getAbsoluteFile(),"123.java");
file2.createNewFile();
file2=new File(file2.getParent(),"123.txt");
file2.createNewFile();
}*/
//创建文件夹和文件
File file3=new File("C:\\Users\\Administrator\\Desktop\\test");
editManyName(file3);
}
//列出当前目录下的所有文件和子目录文件
public static void printAllFileInfo(File file) {
if (file.isDirectory()) {
File []lists=file.listFiles();
if (lists==null) {
return;
}
for (File file1 : lists) {
printAllFileInfo(file1);
}
}else {
System.out.println(file.getName());
}
}
//对文件后缀名为txt的文件进行显示输出
public static void printTxt(File file) {
if (file.isDirectory()) {
File []lists=file.listFiles();
if (lists==null) {
return;
}
for (File file2 : lists) {
printTxt(file2);
}
}else {
if (file.getName().endsWith(".txt")) {
System.out.println(file.getName());
}
/*String regex="\\w+.txt";
boolean r=file.getName().matches(regex);
if(r) {
System.out.println(file.getName());
}*/
}
}
//批量修改文件名称
public static void editManyName(File file) {
if (file.isDirectory()) {
File []lists=file.listFiles();
if (lists==null) {
return;
}
for (File file2 : lists) {
editManyName(file2);
}
}else {
if (file.getName().matches("\\d+.txt")) {
file.renameTo(new File(file.getParent(), "456.txt"));
}else {
file.renameTo(new File(file.getParent(),"456.java"));
}
}
}
}
输出结果:
2.IO流
2.1字节流输入
package day22.stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//输入流 将程序外部的数据,存储到内存中
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
//1.创建一个输入字节流对象,关联要操作的文件,打开流
//1.1声明文件路径
String path="C:\\Users\\Administrator\\Desktop\\test\\111.txt";
//1.2初始化输入流对象
//FileInputStream input=new FileInputStream(new File(path));
FileInputStream input=new FileInputStream(path);
//2.读取操作
//2.1查看流中剩余字节
System.out.println(input.available());
//2.2读取一个字节
System.out.println(input.read());//assic码值
System.out.println(input.available());
//byte[]b=new byte[input.available()];//声明缓存区,不建议使用,如果文件太大,系统可能会崩溃
//int len=input.read(b);//将流中的数据读取到byte数组中,返回的是本次接受的长度
//System.out.println(len);
byte[]b=new byte[5];
//读取长度==-1,说明已经读取到文件的尾部
int len=0;
while ((len=input.read(b))!=-1) {
//从b数组中处理接受的数据
String tmp=new String(b,0,len,"GBK");
System.out.print(tmp);
}
//System.out.println();
//System.out.println(input.read(b));
//System.out.println(input.available());
//3.关闭流
input.close();
}
}
输出结果:
2.2字节流输出
package day22.stream;
import java.io.FileOutputStream;
import java.io.IOException;
//输出流:将计算机内存中的数据,写入到一个指定的文件中,或发送到网络
public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
//1创建一个输出流并关联文件,自动打开流
//1.1声明一个文件路径
String path="C:\\Users\\Administrator\\Desktop\\test\\222.txt";
//1.2创建一个输出流对象 boolean类型代表追加或者不追加
//FileOutputStream output=new FileOutputStream(path);//每次内容会被覆盖
FileOutputStream output=new FileOutputStream(path,false);//代表追加
//2将内存中的数据,写入到一个指定的文件中
//2.1将数据写入流中
String str="你好!qqqqqqqqqqqqq";
//2.2将String类型转换成byte数组
byte[]b=str.getBytes("UTF-8");
//2.3写操作
output.write(b);
//output.write(b, 0, b.length);//将b数组中从0开始,数组的长度,写入到文件中
//output.write(12);//单一写入一个字节
//3强制刷入流中的数据到文件中
output.flush();
//4关闭流
output.close();
}
}
输出结果:
2.3练习题
package day22.stream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
//复制文件
public class StreamDemoTest {
public static void main(String[] args) throws IOException {
//声明文件路径
String path1="C:\\Users\\Administrator\\Desktop\\test\\111.txt";
String path2="C:\\Users\\Administrator\\Desktop\\test\\one\\111.txt";
//创建输入流对象,关联文件
FileInputStream input=new FileInputStream(path1);
//创建输出流对象,并关联文件
FileOutputStream output=new FileOutputStream(path2);
//读取文件
byte[]b=new byte[10];
int len=0;
while ((len=input.read(b))!=-1) {
//处理数据
output.write(b,0,len);
}
//将数据强制刷入流中
output.flush();
//关闭流
input.close();
output.close();
}
}
输出结果:
3.知识框架