File
创建file类的方法
import java.io.File;
public class Main {
public static void main(String[] args) {
String l = "D:\\text.txt";
String l1 = "D:\\";
String l2 = "test.txt";
File f1 = new File(l);
System.out.println(f1);
File f2 = new File(l1, l2);
System.out.println(f2);
File f3 =new File(l1);
File f4 = new File(l1,l2);
System.out.println(f4);
}
}
File常见的方法
import java.io.File;
public class Main {
public static void main(String[] args) {
String l = "D:\\text.txt";
//创建文件类
File f = new File(l);
//判断对象是否为文件夹
System.out.println(f.isDirectory());
//判断文件是否为文件
System.out.println(f.isFile());
//判断是对象是否存在
System.out.println(f.exists());
//返回文件的大小
System.out.println(f.length());
//放回文件的绝对路径
System.out.println(f.getAbsolutePath());
//放回定义文件时使用的路径
System.out.println(f.getPath());
//返回文件的名字(带后缀的)
System.out.println(f.getName());
//返回文件的最后修改时间
System.out.println(f.lastModified());
}
}
运行结果
文件的创建方法
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String l = "D:\\text.txt";
File f = new File(l);
//创建一个空文件,如果父级路径不存在会报错
f.createNewFile();
//创建单级文件夹,如果文件夹已存在则放回false
String l2="D:\\jjm";
File f2=new File(l2);
System.out.println(f2.mkdir());
//删除文件
f2.delete();
}
}
IO流
IO流的分类
输入流和输出流
按传输的方向分为输入流和输出流.
字节流和字符流
按每次获取的字节大小分为字节流和字符流.
字节流:每次只获取一个字节大小的数据;
字符流:每次获取多个字节大小的数据(具体大小根据数据自动获取);
因为字节流每次只获取一个字节大小的数据所以当你想使用字节流一次来获取一个中文字符的时候就会出错,因为中文字符占两个字符(GBK编码占两个字符,UTF-8编码占三个字符)数据会获取不完全;但字符流不会出现这种问题,他自己会根据数据自动获取应该获取的大小以保证数据的完整性.
字节流可以处理一切文件,而字符流一般只用来处理纯文本文件.
节点流和处理流
按功能分为节点流和处理流
节点流:直接对数据进行处理的流.
处理流:先把要处理的数据加载进缓存区然后再进行处理(处理大数据的时候效率高).
处理流在对数据进行处理的时候和节点流一样,只是比节点流多了一个缓冲区(用来存要用的数据)这样就不用去硬盘进行查找了.
字节流中的节点流方法FileOutputStream和FileInputStream
FileOutputStream是向文件里写数据的,FileInputStream是从文件里读取数据的.
FileOutputStream和FileInputStream的定义方式是一样的:
类名 变量名=new 类名("路径");
返回值为读取或的字节的个数
无返回值
//这个程序完成了复制一个文件
public class Main {
public static void main(String[] args) throws IOException {
String l = "D:\\123.mp4";
String l1="D:\\1234.mp4";
byte a[]=new byte[1024*1024];//数组不宜开太大,不然会发生复制的文件大小超过原文件的情况
FileOutputStream stream =new FileOutputStream(l1);
FileInputStream stream1=new FileInputStream(l);
int x;
while((stream1.read(a))!=-1){
stream.write(a);
}
System.out.println(z-y);
stream1.close();
stream.close();
}
}
FileReader和FileWriter
FileReader构造方法
FileWriter构造方法
public class Main {
public static void main(String[] args) throws IOException {
FileWriter fileWriter=new FileWriter("D:\\text.txt");
FileReader fileReader=new FileReader("D:\\text.txt");
fileWriter.write("jjm");
fileWriter.close();
char [] s =new char[3];
int x;
while((x=fileReader.read(s))!=-1){
System.out.println(s);
}
fileReader.close();
}
}
运行结果
注意:FileWriter和FileOutputStream在打开文件的时候都会把文件清空。FileOutStream在程序中执行写入操作的时候会立即执行,但FileWriter不会。
FileWriter和FileReader类实际上都是有一个大小为8192(byte)的缓冲区存在的所有的操作都会在缓冲区进行 :
FileReader会先将字符提取到缓冲区再来读取这是文件被清空也无法影响到缓冲区,当缓冲区被读取完了才会去硬盘里再读取数据放到缓冲区。
FileWriter会先将要写入的字符写到缓冲区当缓冲区被写满了、流要被关闭了或者使用者手动刷新(flush方法)才会将缓冲区的数据写到硬盘中去。
public class Main {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream =new FileOutputStream("D:\\text.txt");
FileInputStream fileInputStream=new FileInputStream("D:\\text.txt");
fileOutputStream.write(3);
System.out.println(fileInputStream.read());
fileInputStream.close();
fileOutputStream.close();
}
public class Main {
public static void main(String[] args) throws IOException {
FileWriter fileWriter=new FileWriter("D:\\text.txt"); //FileReader和FileWriter的使用
FileReader fileReader=new FileReader("D:\\text.txt");
fileWriter.write(2);
int x;
while((x=fileReader.read())!=-1){
System.out.println(x);
}
fileReader.close();
fileWriter.close();
}
public class Main {
public static void main(String[] args) throws IOException {
FileWriter fileWriter=new FileWriter("D:\\text.txt"); //FileReader和FileWriter的使用
FileReader fileReader=new FileReader("D:\\text.txt");
fileWriter.write(2);
fileWriter.close();
int x;
while((x=fileReader.read())!=-1){
System.out.println(x);
}
fileReader.close();
}
BufferedInputStream和BufferedOutputStream
构造器:
BufferedInputStream变量名=new (FileInputStream("路径名"));
BufferedOutputStream变量名=new (FileOutputStream("路径名"));
BufferedInputStream bufferedInputstream=new BufferedInputStream(new FileInputStream("D:text.txt"));
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:text.txt"));
除了创建对象有点不一样其他的使用都是和FileInputStream、FileOutputStream一样的在此就不过多介绍了。
BufferedReader和BufferedWriter
BufferedReader bufferedReader=new BufferedReader(new FileReader("D:text.txt"));
BufferedWriter bufferedwriter=new BufferedWriter(new FileWriter("D:text.txt"));
缓冲区大小为8192(char),运行速度没有得到显著的提升,主要是多了两种特有的方法。
跨平台的换行解释:
因为不同平台的换行符号是不一样的(mac:\r,windows:\r \n,Linux:\n)这个方法会自动根据你所使用的系统自动的去输出换行符号。
其他的和FileReader、FileWriter一样的。
注意:字节缓冲流的缓冲区类型为byte,字符缓冲流的缓冲区类型为char,字节缓冲流的缓冲区大小为8192(byte)=8KB,字符缓冲区的缓冲区大小为8192(char)=16KB。