1.File类
使用File类实现文件的创建与删除
package cn.mldn.demo;
import java.io.File;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("d:\\mldn.txt"); // 文件路径:“\\”转义为“\”
if (file.exists()) { // 文件存在
file.delete(); // 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
创建带目录的文件
package cn.mldn.demo;
import java.io.File;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "hello" + File.separator
+ "demo" + File.separator + "message"
+ File.separator + "mldn.txt"); // 操作文件路径
if (!file.getParentFile().exists()) { // 父路径不存在
file.getParentFile().mkdirs(); // 创建父路径
}
if (file.exists()) { // 文件存在
file.delete(); // 删除文件
} else { // 文件不存在
System.out.println(file.createNewFile()); // 创建新的文件
}
}
}
获取文件基础信息
package cn.mldn.demo;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
class MathUtil {
private MathUtil() {}
public static double round(double num, int scale) { // 四舍五入
return Math.round(Math.pow(10, scale) * num) / Math.pow(10, scale);
}
}
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("d:" + File.separator + "mldn.jpg");
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("文件大小:" + MathUtil.round(
file.length() / (double) 1024 / 1024, 2) + "M");
System.out.println("最后的修改时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date(file.lastModified())));
System.out.println("是目录吗?" + file.isDirectory());
System.out.println("是文件吗?" + file.isFile());
}
}
2.字节流与字符流
使用OutputStream类实现内容输出
package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" +
File.separator + "mldn.txt"); // 输出文件路径
if (!file.getParentFile().exists()) { // 父目录不存在
file.getParentFile().mkdirs(); // 创建父目录
}
OutputStream output = new FileOutputStream(file); // 子类实例化输出流对象
String str = "www.mldn.cn"; // 输出数据内容
output.write(str.getBytes()); // 字符串转为字节数组
output.close(); // 关闭资源
}
}
使用InputStream类读取文件内容
package cn.mldn.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" +
File.separator + "mldn.txt"); // 输出文件路径
if (file.exists()) { // 文件存在
InputStream input = new FileInputStream(file) ; // 文件输入流
byte data [] = new byte [1024] ; // 数据读取缓冲区
// 读取数据,将数据读取到缓冲区之中,同时返回读取的字节个数
int len = input.read(data) ;
System.out.println("【" + new String(data, 0, len) + "】"); // 字节转为字符串
input.close(); // 关闭输入流
}
}
}
使用FileWriter实现数据输出
package cn.mldn.demo;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" +
File.separator + "mldn.txt"); // 输出文件路径
if (!file.getParentFile().exists()) { // 父路径不存在
file.getParentFile().mkdirs(); // 创建父目录
}
Writer out = new FileWriter(file) ; // 实例化Writer类对象
out.write("魔乐大学:"); // 输出字符串
out.append("www.zyy.com") ; // 追加输出内容
out.close(); // 关闭输出流
}
}
字符输入流
package cn.mldn.demo;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" +
File.separator + "mldn.txt"); // 输出文件路径
if (file.exists()) { // 文件存在
Reader in = new FileReader(file) ; // 实例化输入流
char data[] = new char[1024]; // 缓冲区
in.skip(9) ; // 跨过9个字符长度
int len = in.read(data) ; // 读取数据
System.out.println(new String(data,0,len));
in.close(); // 关闭输入流
}
}
}
文件拷贝
package cn.mldn.vo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class JavaAPIDemo9 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
CopyUtil.copyFile("e:" + File.separator + "hello.jpg", "e:" + File.separator + "zyy.jpg");
long end = System.currentTimeMillis();
System.out.println("时间" + (end - start));
}
}
class CopyUtil {
public static void copyFile(String src, String dest) {
copyFile(new File(src), new File(dest));
}
public static void copyFile(File src, File dest) {
InputStream input = null;
OutputStream output = null;
try {
input = new FileInputStream(src);
output = new FileOutputStream(dest);
byte[] car = new byte[1024];
int len = -1;
while ((len = input.read(car)) != -1) {
output.write(car, 0, len);
}
output.flush();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (input != null) {
output.close();
}
if (input != null) {
input.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.转换流
package cn.mldn.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" +
File.separator + "mldn.txt"); // 输出文件路径
if (!file.getParentFile().exists()) { // 父路径不存在
file.getParentFile().mkdirs(); // 创建父目录
}
OutputStream output = new FileOutputStream(file) ; // 字节流
Writer out = new OutputStreamWriter(output) ; // 字节流转字符流
out.write("www.mldn.cn"); // 字符流输出
out.close(); // 关闭输出流
output.close(); // 关闭输出流
}
}
4.缓存流
package cn.mldn.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class JavaIODemo {
public static void main(String[] args) throws Exception {
// System.in为InputStream类实例,利用InputStreamReader转为Reader实例
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入您的年龄:"); // 提示信息
String msg = input.readLine(); // 接收输入信息
if (msg.matches("\\d{1,3}")) { // 是否由数字所组成
int age = Integer.parseInt(msg); // 字符串转为int
System.out.println("年龄为:" + age); // 数据输出
} else {
System.out.println("输入的内容不是数字,程序无法正常执行!");
}
}
}
5.对象序列化
class Member implements Serializable {
private String name ;
private int age ;
public Member(String name,int age) {
this.name = name ;
this.age = age ;
}
// setter、getter、无参构造略
@Override
public String toString() {
return "姓名:" + this.name + "、年龄:" + this.age ;
}
}
public class JavaIODemo {
// 本次操作要将序列化的对象保存到文件之中,将文件定义为公共常量
private static final File SAVE_FILE = new File("D:" + File.separator + "mldn.member") ;
public static void main(String[] args) throws Exception {
saveObject(new Member("小李老师",18)) ; // 对象序列化
System.out.println(loadObject()); // 对象反序列化
}
public static void saveObject(Object obj) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(SAVE_FILE)) ;
oos.writeObject(obj); // 序列化
oos.close();
}
public static Object loadObject() throws Exception {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(SAVE_FILE)) ;
Object obj = ois.readObject() ; // 反序列化
ois.close();
return obj ;
}
}