Java文件流
File类篇
1.File类
在学习File类之前,需要知道的有以下两点:
(1)File类是java.io包下的一个类
(2)应该将File理解成路径而不是文件
我们学习File,首先就要先了解它的构造方法
2.File的构造方法
下面的代码可以很清晰地看到它的构造方法
public static void main(String[] args)
{
//构造一个新文件,括号中为文件的目录
File file = new File("C:\\Users\\lgx\\Desktop\\lgx.txt");
//打印出来结果为true
System.out.println(file.exists());
}
再说一下File的构造方法吧,它的优势在于可以对某一个文件路径下的多个文件进行操作
public static void main(String[] args)
{
String parents = "C:\\Users\\lgx\\Desktop";
String child = "lgx.txt";
File file = new File(parent,child);
System.out.println(file.exists());
}
3.常见的对File类操作的几个方法
(1)创建一个文件 .createNewFile() ,运行一次后会返回true,第二次返回false(因为运行并刷新之后文件就已经存在了)
(2)重命名一个文件
File a = new File(“a.txt”);
File b = new File(“b.txt”);
a.renameTo(b); 就是将文件名为a的文件变成文件名为b的文件(文件内容不变)
(3)删除一个文件 .delete(); (注:这个方法不能删除文件夹下有文件或有文件夹的情况,该方法只能删除一个文件或者一个空的文件夹)
(4)获取文件的字符的个数 .length();
(5)获取文件的相对路径 .getPath();
(6)获取文件的绝对路径 .getAbsolutePath();
(7)获取文件的名称 .getName();
(8)获取最后一次修改时间 .lastModified();
IO流篇
流按照流向分为两种:输入流和输出流
流按照操作类型也是有两种:字节流和字符流
其中: InputStream、OutputStream是处理字节流的抽象类
InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.
InputStreamReader和OutputStreamWriter则是处理字符流的抽象类的
InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.
OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.
使用IO流的时候,尤其要注意以下几点:
使用前,需要导入IO包相关类,例如前面学习的File
使用时,进行IO异常处理。打开一个文件,这个文件路径很可能不存在,这样异常需要处理。
使用后,需要释放资源。例如,打开文件读取之后,需要关闭文件,释放内存资源。
(1)FileInputStream(输入)
//import java.io.*;
public static void main(String[] args) throws IOException //异常处理
{
//创建流对象
FileInputStream fis = new FileInputStream("lgx.txt");
int a = 0;
//读取(文件结束的标记符号是-1,该方法的读取效率较低)
while((b = fis.read()) != -1)
{
System.out.println(b);
}
//关闭文件,释放资源
fis.close();
}
(2)FileOutputStream(输出)
public static void main(String[] args) throws IOException
{
FileOutputStream fos = new FileOutputStream("lgx.txt");
//写入字节
fos.write(666);
//同样,FileOutputStream也需要关闭
fos.close();
}
(3)利用输入输出对文件进行拷贝
package my;
import java.io.*;
public class CopyFile
{
public static void main(String[] args) throws IOException
{
//1.创建输入流对象
FileInputStream fis = new FileInputStream("文件的绝对路径");
//2.创建输出流对象
FileOutputStream fos = new FileOutputStream("拷贝后的文件名")
int a;
//3.循环判断,不为-1就写入文件
while ((a = fis.read()) != -1)
{
//4. 写入文件
fos.write(a);
}
//5.关闭输入流
fis.close();
//6.关闭输出流
fos.close();
}
}