文件的read / write / copy
/**
* 统计文件夹的大小
*
* @param pathName 目标文件夹的路径
* @return 返回该文件夹的总大小
*/
public static long getSize(String pathName) {
long size = 0;
// 通过路径生成一个file对象,表示根目录
File file = new File(pathName);
// 利用listFile方法遍历该目录中的所有子元素(包括子目录和子文件)
File[] files = file.listFiles();
for (File f : files) {
System.out.println("当前的文件路径:" + f.getPath());
if (f.isFile()) {
size += f.length();
} else {
size += getSize(f.getPath()); // 如果用全局变量size,就改成 getSize(f.getPath());
}
}
return size;
}
// 文件夹的删除
/**
* 读文件内容的方法 , 可以用FileReader, 如果有异常,也在声明中抛出
*
* @param pathName 目标文件路径
* @return
*/
public static String read(String pathName) throws IOException {
StringBuilder builder = new StringBuilder();
//读取缓冲区
char[] chars = new char[1024];
//每次读取的字符数量
int num = 0;
Reader fileReader = null;
fileReader = new FileReader(pathName);
while((num = fileReader.read(chars)) != -1)
builder.append(chars, 0 , num);
if (fileReader != null)
fileReader.close();
return builder.toString();
}
/**
* 向指定文件中写入内容的方法 , 可以用FileWriter,如果有异常,也在声明中抛出
*
* @param content 要写入的内容
* @param pathName 要写入的目标文件
*/
public static void write(String content, String pathName) throws IOException {
FileWriter fileWriter = null;
fileWriter = new FileWriter(pathName);
fileWriter.write(content);
if (fileWriter != null)
fileWriter.close();
}
/**
* 文件的拷贝方法 , 此方法要支持任意类型的文件(所有的文件都可以看做二进制/字节 形式 ,就应当使用字节流
*
* @param src 源文件的地址
* @param dist 目标文件的地址
*/
public static void copy(String src, String dist) throws IOException {
//读取缓冲区
char[] chars = new char[1024];
//储存字符串
StringBuilder builder = new StringBuilder();
//读取字符串数量
int n = 0;
Reader reader = null;
reader = new FileReader(src);
BufferedReader bufferedReader = null;
bufferedReader = new BufferedReader(reader);
while((n = bufferedReader.read(chars)) != -1)
builder.append(chars, 0, n);
FileWriter fileWriter = null;
fileWriter = new FileWriter(dist);
fileWriter.write(builder.toString());
if (fileWriter != null)
fileWriter.close();
if (builder != null)
bufferedReader.close();
if (reader != null)
reader.close();
}
对象的read与writer
user
public class User implements Serializable{
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setGender(String gender) {
this.gender = gender;
}
}
UserWrite
public class UserWrite {
public static final String S = File.separator;
public static void main(String[] args) {
User users = new User();
users.setName("zhang");
users.setAge(18);
users.setGender("男");
String pathName = "Directory" + S + "Directory2" + S + "File2";
OutputStream fileOutputStream = null;
ObjectOutputStream objectOutputStream = null;
try {
fileOutputStream = new FileOutputStream(pathName, true);
objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(users);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
UserReader
public class UserReader {
public static final String S = File.separator;
public static void main(String[] args) {
User user = null;
String pathName = "Directory" + S + "Directory2" + S + "File2";
InputStream fileInputStream = null;
ObjectInputStream objectInputStream = null;
try {
fileInputStream = new FileInputStream(pathName);
objectInputStream = new ObjectInputStream(fileInputStream);
user = (User) objectInputStream.readObject();
System.out.println(user.getName());
System.out.println(user.getAge());
System.out.println(user.getGender());
//当文件中有几个对象时, 可以再次声明ObjectInputStream来读取下一个对象
objectInputStream = new ObjectInputStream(fileInputStream);
user = (User) objectInputStream.readObject();
System.out.println(user.getName());
System.out.println(user.getAge());
System.out.println(user.getGender());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}