存储在程序中的数据是暂时的,当程序终止时数据就会丢失。想要永久保存程序中的数据,那么可以将它们存入磁盘或其他永久存储设备的文件中。这些文件日后便可以被其他程序传送和读取。
数据存储在文件中,那么存在一个File类,可用其获取文件/文件夹的属性、删除/重命名文件或文件夹(文件夹也被称为目录)。
!:① 在Windows中文件名的分隔符是 \ ,java中是 \\ 表示。
② 绝对文件名: 以来机器的 eg. c:\\book\\Welcome.java (只能在Windows上工作,不能在其他平台工作)
③ 相对文件名:指相对于当前工作目录的eg.Welcome.java
目录
一、I/O
1、定义
2、分类
二、File类
1、创建文件
2、删除文件
三、类File
1、创建文件夹
2、 列出目录中的所有文件
四、字节流
1、主要操作步骤
2、具体代码
1、主要操作步骤
2、具体代码
一、I/O
1、定义
I:指的是数据输入流
O:指的是数据输出流
(简单而言就是数据的输入和输出方式,当向内存输入数据时,即为I;内存输出数据时(也称写),即为O)
2、分类
①:按流分:输入流、输出流
②:按数据类型分:
字节流 (能够操作所有类型的文件,音频图片视频等)、
字符流 (只能操作纯文本文件,即记事本可以打开的文件)
!:虽然字节流可以操作所有文件,但是利用字节流对中文进行读写操作时有可能出现乱码现象。因此需要字符流。
(乱码原因:字节流是一次读一个字节,而中文转换为码表一般都是多个字节,而字节流每次只能读取多个字节中的一部分,所以出现乱码现象;字符流=字节流+编码表)
二、File类
1、创建文件
可以使用createNewFile()方法,但是该方法使用了关键字throws,所以在使用时需使用 lielietry...catch进行异常处理。
import java.io.File;
import java.io.IOException;
public class FIle {
public static void main(String[] args){
//实例化File类的对象
File file = new File("E:\\FileTest.text");
try{
//创建文件,根据给定的路径创建
file.createNewFile();
}catch(IOException e){
//输出异常信息
e.printStackTrace();
}
}
}
2、删除文件
使用delet()方法完成。
import java.io.File;
public class FIle {
public static void main(String[] args){
//实例化File类的对象
File file = new File("E:\\FileTest.text");
//删除文件
file.delete();
}
}
三、类File
1、创建文件夹
该功能可以使用方法mkdir()来完成。
import java.io.File;
import java.io.IOException;
public class FIle {
public static void main(String[] args){
//实例化对象"路径"+分割+"文件名"
File file = new File("E:"+File.separator+"www");
file.mkdir();
}
2、 列出目录中的所有文件
public String[] list();方法列出文件全部名称,返回一个字符串数组。
public File[] listFile();方法列出完整的路径(路径+名称),返回一个File对象数组。
public class FIle {
public static void main(String[] args){
//实例化对象
File file = new File("E:"+File.separator);
//list方法列出名称,并返回给数组
String str[] = file.list();
//利用for循环遍历返回值并输出
for(int i= 0;i < str.length;i++){
System.out.println(str[i]);
}
}
}
public class FIle {
public static void main(String[] args){
File file = new File("E:"+File.separator);
File f[] = file.listFiles();
for(int i= 0;i < f.length;i++){
System.out.println(f[i]);
}
}
}
四、字节流
字节流主要操作byte类型数据,以byte数组为准,主要操作类是OutputStream类和InputStream类。
1、主要操作步骤
①使用类File打开一个文件
②通过字节流/字符流的子类指定输出位置
③进行读/写操作
④关闭输入/输出
2、具体代码
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputStreamDemo {
public static void main (String[] args){
//实例化对象
FileOutputStream file = null;
//抛出异常(字节流方法基本都需要抛出异常(原方法中均有),否则报错)
try{
//给file对象路径
file = new FileOutputStream("E:\\a.text");
//写入内容,写整数写出来对应的是相对应的字节码();需要写多个可以利用byte[]数组
//字节流主要操作byte数组
file.write(98);
}catch(IOException e){
e.printStackTrace();
}finally{
//finally语句里的代码一定会被执行
if(file != null){
try{
//每次写完要释放资源,释放资源后可以人为删除系统刚刚创建的这个文件,否则无法删除
file.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}
import java.io.FileInputStream;
import java.io.IOException;
public class OutputDemo {
public static void main(String[] args) throws IOException {
FileInputStream file = new FileInputStream("E:\\a.text");
//将读取的返回值赋值给read
int read = file.read();
System.out.println(read);
file.close();
}
}
五、字符流
字符流中输出主要是使用Write类完成,输入主要是Reader类完成。
1、主要操作步骤
和字节流一样
2、具体代码
import java.io.FileWriter;
import java.io.IOException;
public class WriteDemo {
public static void main(String[] args) throws IOException {
//实例化对象,给出路径
FileWriter file = new FileWriter("E:\\a.text");
//赋值给str
String str = "字符流abc";
//使用writr方法
file.write(str);
//释放资源
file.close();
}
}