File创建文件夹
创建文件会返回true,但不会创建
mkdir():只创建目录最后一个文件夹,倘若最有一个文件夹已存在或目录前面的文件夹不存在则返回false
mkdirs():创建文件夹。若目录中的文件夹不存在,先创建目录中缺失的文件夹,再创建指定的文件夹,返回值表示是否创建成功。
File file = new File("d:\\404\\a.txt");
Boolean boolean = file.mkdir();
exists方法
判断资源是否存在,存在返回true,不存在返回false(既可以判断文件夹也可以判断文件)
File file = new File("d:\\sxt\\sxt.txt");
Boolean exists = file.exists();
if(exists){
System.out.println("此文件已存在");
}else{
System.out.println("此文件不存在");
}
创建空白文件
所创建的目录下不能出现同名文件夹或文件,否则会返回false
可以创建任何后缀名正确的文件,只不过所创建的文件为空白文件,无任何内容
file.createNewfile() 会抛出异常IOException,进行捕获即可
public static void main(String[] args) throws IOException { File file = new File("d:\\sxt\\sxt.txt"); boolean newFile = file.createNewFile(); System.out.println(newFile); }
重命名文件
file.renameTo(File) 利用剪切特性,把资源剪切后放回到源路径,起新名字,实现重命名。还可以通过此功能实现文件更换目录的要求
相同目录或不相同目录重命名都可
public static void main(String[] args) throws IOException {
File file = new File("d:\\sxt\\sxt.txt");
boolean b = file.renameTo(new File("d:\\sxt\\sxt666\\sxt777.txt"));
System.out.println(b);//true
}
public static void main(String[] args) throws IOException {
File file = new File("d:\\sxt\\sxt.txt");
boolean b = file.renameTo(new File("d:\\sxt\\sxt666.txt"));
System.out.println(b);//true
}
删除文件(夹)
无法删除有内容的文件夹
public static void main(String[] args) throws IOException {
File file = new File("d:\\sxt\\sxt.txt");
boolean delete = file.delete();
System.out.println(delete);
}
查看目录中的内容
list() 返回值为目录中资源的名称。返回值类型String[]。数组长度和资源个数相同。如果是空文件夹返回为一个长度为0的数组对象。如果是文件夹不存在则返回null.
public static void main(String[] args) {
File file = new File("d:\\PS");
String[] list = file.list();
for (String s : list) {//遍历数组
System.out.println(s);
}
}
listFile()返回值为目录中资源的名称。返回值类型File[]。数组长度和资源个数相同。如果是空文件夹返回为一个长度为0的数组对象。如果是文件夹不存在则返回null.
public static void main(String[] args) {
File file = new File("d:\\PS");
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1);
}
}
public static void main(String[] args) {
File file = new File("d:\\PS");
File[] files = file.listFiles();
for (File file1 : files) {
System.out.println(file1.getName());//只获取文件名字
}
}
输入流:读取 Input
输出流:写入 Output
FileInputStream、FileOutputStream是文件操作常用的两种流。借助这两个流实现文件的读取、文件输入和拷贝等功能
FileInputStream 读
FileOutputStream 写
FileInputStream常用的方法
FileOutputStream常用的方法
从一个文件里面读取内容(无中文)
package file.homework;
import java.io.FileInputStream;
import java.io.IOException;
public class HomeWork03 {
public static void main(String[] args) {
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream("d:\\a.txt");
int read = 0;
while((read = fileInputStream.read())!= -1){
System.out.println((char)read);
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fileInputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
往一个文件内写入内容
倘若要添加内容的文件夹中没有此文件。执行代码后会创建此文件并执行添加内容。连文件夹都没有会报错
package file.homework;
import java.io.FileOutputStream;
import java.io.IOException;
public class HomeWork03 {
public static void main(String[] args) {
FileOutputStream fileOutputStream=null;
try {
fileOutputStream=new FileOutputStream("d:\\a.txt",true);//true表示添加的内容是以追加的方式
String str = "ta是添加的内容";
byte[] bytes = str.getBytes();
fileOutputStream.write(bytes);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fileOutputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
文件的拷贝(FileInputStream,FileOutputStream)
package file.homework;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class HomeWork03 {
public static void main(String[] args) {
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream("d:\\test.png");
fileOutputStream = new FileOutputStream("d:\\test_copy.png");
byte[] bytes1 = new byte[1024];
int read ;
while((read = fileInputStream.read(bytes1))!= -1){
fileOutputStream.write(bytes1,0,read);
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fileOutputStream.close();
fileInputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
字符输入流FileReader
字符输出流FileWriter
通过 字符输出流FileWriter 字符输入流FileReader 不同文件的内容拷贝
将a.txt 的内容复制到 b.txt里面
package file.homework;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class HomeWork03 {
public static void main(String[] args) {
FileReader fileReader =null;
FileWriter fileWriter = null;
try {
fileReader = new FileReader("d:\\a.txt");
fileWriter = new FileWriter("d:\\b.txt");
char[] chars = new char[1024];
int readln;
while((readln =fileReader.read(chars) )!=-1 ){
fileWriter.write(chars,0,readln);
//System.out.println(new String(chars,0,readln));
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
fileWriter.close();
fileReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
缓冲流
字节缓冲流
字符缓冲流
通过字符缓冲输入输出流完成a.txt内容到b.txt的复制
package file.homework;
import java.io.*;
public class HomeWork03 {
public static void main(String[] args) {
BufferedWriter bufferedWriter =null;
BufferedReader bufferedReader = null;
try {
bufferedReader =new BufferedReader(new FileReader("d:\\a.txt"));
bufferedWriter= new BufferedWriter(new FileWriter("d:\\b.txt"));
String str = null;
while((str = bufferedReader.readLine())!=null){//用于接受bufferedReader.readLine()的内容
bufferedWriter.write(str);
bufferedWriter.newLine();
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if (bufferedWriter!= null){
bufferedWriter.flush();
}
if (bufferedReader!= null){
bufferedWriter.flush();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
序列化和反序列化
序列化
反序列化
序列化 反序列化实例
创建Student类
package file.homework;
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
序列化
package file.homework;
import java.io.*;
public class HomeWork03 {
public static void main(String[] args) {
//序列化
Student jack = new Student("jack", 3);
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("d:\\a.txt"));
objectOutputStream.writeObject(jack);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
文件内容
反序列化
package file.homework;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class HomeWork03 {
public static void main(String[] args) {
//反序列化
try {
ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream("d:\\a.txt"));
Student stu = (Student)objectInputStream.readObject();
System.out.println(stu);
}catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
输出
序列码
倘若序列码是由JVM机自己给定的,当在执行完序列化之后,再在Student类中增加一条属性,并修改对应的构造器和toString方法。此时再执行反序列化时就会报错。
当如果序列码是由我们自己指定的,当在执行完序列化之后,再在Student类中增加一条属性,并修改对应的构造器和toString方法。此时再执行反序列化时就会输出新增加的属性,不过是为数据类型的默认值,因为再序列化时并未对其进行操作。