File工具类
package cn.tedu.io;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
//测试File工具类
public class Test1_File {
public static void main(String[] args) throws IOException {
//创建对象--参数是路径 //可以是文件得/文件夹
File file = new File("C:\\Users\\Administrator\\Desktop\\123.txt");//文件路径
//常用方法
System.out.println(file.length());//文件得字节量
System.out.println(file.exists());//判断文件是否存在
System.out.println(file.isFile());//判断file是否为文件
System.out.println(file.isDirectory());//判断file是否为文件夹
System.out.println(file.getName());//获取文件名
System.out.println(file.getParent());//获取文件父目录
System.out.println(file.getAbsolutePath());//获取文件完整路径
System.out.println(file.createNewFile());//创建不存在得新文件
System.out.println(file.mkdir());//创建单层不存在得文件夹
System.out.println(file.mkdirs());//创建多层不存在得文件夹
//System.out.println(file.delete());//删除文件,删除文件夹得时候只能删除空得文件夹
//列表方法--列出文件夹得资源
file = new File("C:\\Users\\Administrator\\Desktop");
String[] strs = file.list();//列出文件得名称放入数组中
System.out.println(Arrays.toString(strs));
File[] files = file.listFiles();//列入文件并封装成file对象放入数组
System.out.println(Arrays.toString(files));
}
}
递归目录总大小
package cn.tedu.io;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
//测试递归目录总大小
/**
* 1、把指定目录封装成File对象
2、把文件夹列表列出来
3、判断,如果是文件,直接把f.length()相加
4、判断,如果是文件夹,继续列表,继续判断,如果是文件相加,如果又是文件夹,继续列表,继续判断,如果是文件相加......
5、如果是文件夹,递归调用方法本身的业务逻辑
*/
public class Test2_File2 {
public static void main(String[] args) throws IOException {
//接收用户输入得路径
@SuppressWarnings("resource")
String path = new Scanner(System.in).nextLine();
//吧路径封装成file对象
File file = new File(path);
//调用size()---求大小
long total = size(file);
System.out.println(total);
}
//求大小
public static long size(File file) {
//1.列出文件夹下得所有资源
File[] a = file.listFiles();
//获取每个资源
long sum = 0 ;
for(int i =0 ; i<a.length ; i++) {
if(a[i].isFile()) {
sum +=a[i].length();
}else if (a[i].isDirectory()){
sum += size(a[i]);
}
}
return sum;
}
}
字节流读取
package cn.tedu.io;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
//测试字节流读取
public class Test3_In {
public static void main(String[] args) throws IOException {
method();//低效
method2();//高效
}
private static void method2() {
InputStream in = null;
try {
//创建对象
in = new BufferedInputStream(
new FileInputStream
("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt"));
//读取数据
int b = 0;
while((b = in.read()) != -1) {
System.out.println(b);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void method() {
InputStream in = null;
InputStream in2 = null;
try {
File file = new File("C:\\Users\\Administrator\\Desktop\\123.txt");
//创建字节流读取对象
in = new FileInputStream(file);
in2 = new FileInputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt");
//调用父类功能,开始读取
/*
* for(int i=0 ;i<file.length();i++) { System.out.println(in.read()); }
*/
int b= 0;
while( (b=in.read()) != -1) {
System.out.println(b);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//释放资源
try {
in.close();
in2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
字节流写入
package cn.tedu.io;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Reader;
//测试字节流输出
public class Test5_Out {
public static void main(String[] args) throws IOException {
method();//低效
method2();//高效
}
private static void method2() {
OutputStream out=null;
try {
//创建对象
//out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\123.txt"));//覆盖
out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\123.txt",true));//追加
//开始写出
out.write(98);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void method() {
OutputStream out = null;
try {
//创建对象
//out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\123.txt");//覆盖
out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\123.txt",true);//追加
//开始写出
out.write(97);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
字符流读取
package cn.tedu.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
//测试字符流读取
public class Test4_In {
public static void main(String[] args) throws IOException {
method();//低效
method2();//高效
}
private static void method2() {
Reader reader =null;
try {
//创建对象
reader = new BufferedReader(new FileReader(new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt")));
//读取数据
int b = 0;
while((b= reader.read()) != -1) {
System.out.println(b);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭流
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void method() {
Reader reader = null;
Reader reader1 = null;
try {
//创建对象
reader = new FileReader(
new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt"));
reader1 = new FileReader(
"C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt");
//开始读取
int b = 0;
while((b= reader.read()) != -1) {
System.out.println(b);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭流,释放资源
try {
reader.close();
reader1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
字符流写入
package cn.tedu.io;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
//测试字符流输出
public class Test6_Out {
public static void main(String[] args) throws IOException {
method();//低效
method2();//高效
}
private static void method2() {
Writer out = null;
try {
//创建对象
/*
* out = new BufferedWriter( new FileWriter
* ("C:\\Users\\Administrator\\Desktop\\123.txt"));//覆盖
*/ out = new BufferedWriter(
new FileWriter
("C:\\Users\\Administrator\\Desktop\\123.txt"));//追加
//开始写出
out.write("dhafjkh");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void method() {
Writer out = null;
try {
//创建对象
//out = new FileWriter("C:\\Users\\Administrator\\Desktop\\123.txt");//覆盖
out = new FileWriter("C:\\Users\\Administrator\\Desktop\\123.txt",true);//追加
//开始写出
out.write(97);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//释放资源
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
字节流操作 :文件的复制以及读写 ,文件的复制以及读写,只能操作字符,可以操作图片
package cn.tedu.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
//字节流操作 :文件的复制以及读写 ,文件的复制以及读写,只能操作字符,可以操作图片
//1.读取文件
//2.吧数据写出到目标文件中
public class Test7_IOCopy {
public static void main(String[] args) {
File from = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt");
File to = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\234.txt");
copy(from,to);
}
private static void copy(File from, File to) {
//读取源文件
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(from));//读取源文件
//吧数据写到目标文件中
out = new BufferedOutputStream(new FileOutputStream(to));
byte[] cs = new byte[8*1024];//批量写出
int b = 0 ;
while((b = in.read(cs)) != -1) {
out.write(cs);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流操作 :文件的复制以及读写,只能操作字符,不能操作图片
package cn.tedu.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
//字符流操作 :文件的复制以及读写,只能操作字符,不能操作图片
//1.读取文件
//2.吧数据写出到目标文件中
public class Test8_IOCopy2 {
public static void main(String[] args) {
File from = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\123.txt");
File to = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\234.txt");
copy(from,to);
}
private static void copy(File from, File to) {
//读取源文件
Reader in = null;
Writer out = null;
try {
in = new BufferedReader(new FileReader(from));//读取源文件
//吧数据写到目标文件中
out = new BufferedWriter(new FileWriter(to));
char[] cs = new char[8*1024];//批量读写
int b = 0 ;
while((b = in.read(cs)) != -1) {
//out.write(cs);
//第一参数写出的数据,第二个参数,从哪里写,第三个参数,到哪里结束
out.write(cs, 0, b);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
编码转化流
package cn.tedu.io;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
//测试编码转化流
public class Test9_Encoding {
public static void main(String[] args) {
//字节流转化字符流
// try {
//创建字节流
// OutputStream out = new FileOutputStream("1.txt");
//创建字符流
// Writer out2 = new BufferedWriter(new OutputStreamWriter(out,"utf-8"));
// out2.write("渣渣辉");
//out2.close();
//out.close();
//} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
//}
//字符流转化字节流
InputStream in;
try {
in = new FileInputStream("1.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"gbk"));
System.out.println(reader.readLine());
reader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
序列化与反序列化
package cn.tedu.seria;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
//测试对象的序列化
public class Test1_Serializ {
public static void main(String[] args) {
method();
method2();
}
//反序列化:磁盘中的数据返回到java对象中
private static void method2() {
ObjectInputStream in = null ;
try {
in = new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\123.txt"));
Object obj = in.readObject();
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//序列化:将java对象写入磁盘中
private static void method() {
Student s = new Student("sh",18,18.6);
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\123.txt"));
out.writeObject(s);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Student implements Serializable{
private static final long serialVersionUID = 1L;
public Student() {}
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
private String name;
private int age;
private double score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}
}