文件
文件是什么
文件就是保存数据的地方,例如word文档,txt文本档,图片,视频…都是文件。
文件流
文件在程序中是以流的形式来操作的。
流是一组有序的数据序列,根据操作的类型,可以分为输入流和输出流。
I/O流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。
输入输出是相对于java文件而言的。
创建文件
可以使用File类创建一个文件对象,通常使用三种方法:
import org.testng.annotations.Test;
import java.io.File;
import java.io.IOException;
public class createFile {
public static void main(String[] args) {
}
@Test
//方式1 直接写父类路径和子类路径
public void createFile01(){
String pathName = "D:\\word.txt";
//此处创建的file 只是一个文件对象,只有执行了createNewFile之后
//才会建立文件
File file = new File(pathName);
try{
file.createNewFile();
System.out.println("文件创建成功");
}catch (IOException e){
e.printStackTrace();
}
}
@Test
//方式2 子类路径和父类路径分开
public void createFile02(){
String FatherPath = "D:\\";
String childPath = "word1.txt";
File file = new File(FatherPath,childPath);
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
//方式3 //父类路径是一个文件对象
public void createFile03(){
File FatherPath = new File("D:\\" );
String child = new String("word03.txt");
File file = new File(FatherPath,child);
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
获取文件信息
- getName(); //获取文件的名称
- 返回值为String
- canRead(); //判断文件是否可读
- 返回值为boolean
- canWrite(); //判断文件是否可以被写入
- 返回值为boolean
- exists(); //判断文件是否存在
- 返回值为boolean
- length(); //获取文件的长度
- 返回值为long
- getAbsolutePath(); //获取文件的绝对路径
- 返回值为String
- getParent(); //获取文件的父路径
- 返回值为String
- isFile(); //判断抽象路径名表示的文件是否为一个标准文件
- 返回值为boolean
- isDirectory(); //判断文件是否为一个目录
- 返回值为boolean
- isHidden(); //判断文件是否为隐藏文件
- 返回值为boolean
- lastModified(); //获取文件最后修改时间
- 返回值为long
常用的文件操作
-
目录的操作和文件的删除
- 判断文件是否存在,如果存在就删除,不存在就创建一个文件
@Test public void delete(){ File file = new File("D:\\word.txt"); if(file.exists()){ if(file.delete()){ System.out.println("删除成功"); } else{ System.out.println("删除失败"); } } else{ try{ file.createNewFile(); }catch (IOException e){ e.printStackTrace(); } } }
- 判断目录是否存在,如果存在就删除,不存在就创建
@Test public void Demo(){ File file = new File("D:\\demo"); if(file.exists()){ if(file.delete()){ System.out.println("删除成功"); }else{ System.out.println("删除失败"); } } else{ if(file.mkdirs()){ System.out.println("目录创建成功"); } else{ System.out.println("目录创建失败"); } } }
IO流原理及流的分类
I/O 是Input/Output的缩写
流的分类
- 按操作数据单位不同分为:字节流(8bit),字符流(按字符)
- 字节流有利于读取二进制文件
- 字符流读取效率相对来说更高,通常用来读取文本文件
- 按数据流的流向不同:输入流、输出流
- 按流的角色不同:节点流、处理流、包装流
输入流
- inputStream 字节输入流
- FileInputStream
- BufferedInputStream
- ObjectInputStream
- Reader //字符输入流
- FileReader
- BuffererReader
- InputStreamReader
输出流
- OutputStream //字节输出流
- FileOutputStream
- BufferedOutputStream
- ObjectOutputStream
- Writer //字符输出流
- FileWriter
- BufferedWriter
- OutputStreamWriter
流和文件的关系
流是文件之间传输的媒介,一个文件通过输入流在另一个文件中获取信息,通过输出流向另一个文件中传送信息。
就像是用户与网购平台的关系,流就相当于快递服务平台,在网购平台与用户之间运送物品。
常用的类
-
FileInputStream
@Test public void readFile01(){ //文件目录 String file = new String("D:\\word.txt"); int read = 0; FileInputStream fileInputStream = null; try { //创建FileInputStream对象,用于读取; fileInputStream = new FileInputStream(file); //如果返回-1,则说明文件已经到达末尾; while((read = fileInputStream.read())!=-1){ System.out.print((char)read); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //关闭文件 try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
- FileOutputStream //字节输出流
-
@Test public void outFile01(){ //文件目录 String file = new String("D:\\a.txt"); FileOutputStream fileOutputStream = null; try { //创建FileOutputStream对象,用于写入文件; //true 表示可以追加写入,不加true会覆盖原有数据。 fileOutputStream = new FileOutputStream(file,true); //写入一个字节 fileOutputStream.write('a'); //写入一个字符串 String str = "hello,world"; //可以把一个字符串转成一个字符数组 fileOutputStream.write(str.getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //关闭文件 try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } }