java File类与文件输入/输出流:FileInputStream与FileOutputStream

科技网编2023-03-16 12:301950

java File类与文件输入/输出流


File类

File类是java.io包中唯一代表磁盘文件本身的类,该类主要用于文件和目录的创建、文件的查找和文件的删除等。

1.File(String pathname) 该构造方法通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。

语法如下:

new File(String pathname)
//pathname代表路径名
//例:
File file = new File("E:\file.txt");

2.File(String parent, String child)该方法根据 parent 路径名字符串和 child 路径名字符串(包含文件名)创建一个新 File 实例。

语法如下:

new File(String parent, String child)
//parent:父路径字符串,如:E:/
//child:子路径字符串,如:file.txt

3.File(File f, String child);该构造方法通过给定的f抽象路径名和子路径名字符串创建一个新的File实例。

语法如下:

new File(File f, String child)
//f:父路径字符串,如:E:/
//child:子路径字符串,如:file.txt

创建File对象:

File file = new File("Hello.txt")

例:

import java.io.File;
public class Filetxt{
public static void main(String[] args) {
File file = new File("D:\\Hello.txt");
if(file.exists()) //如果文件存在
{
file.delete(); //删除文件
System.out.println("文件已删除");
}
else {
try {
file.createNewFile(); //创建该文件
System.out.println("文件已创建");
}catch(Exception e) {
e.printStackTrace();
}
}
}
}

如果D盘目录下有Hello.txt文件,输出:文件已删除,反之输出:文件已创建

获取文件信息

创建File对象成功后,常用方法如下:

方法描述
public String getName()返回由此抽象路径名表示的文件或目录的名称。
public String getParent()返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。
public File getParentFile()返回此抽象路径名的父路径名的抽象路径名,如果此路径名没有指定父目录,则返回 null。
public String getPath()将此抽象路径名转换为一个路径名字符串。
public boolean isAbsolute()测试此抽象路径名是否为绝对路径名。
public String getAbsolutePath()返回抽象路径名的绝对路径名字符串。
public boolean canRead()测试应用程序是否可以读取此抽象路径名表示的文件。
public boolean canWrite()测试应用程序是否可以修改此抽象路径名表示的文件。
public boolean exists()测试此抽象路径名表示的文件或目录是否存在。
public boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。
public boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件。
public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间。
public long length()返回由此抽象路径名表示的文件的长度。
public boolean createNewFile() throws IOException当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。
public boolean delete()删除此抽象路径名表示的文件或目录。
public void deleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
public String[] list()返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
public String[] list(FilenameFilter filter)返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。
public File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
public File[] listFiles(FileFilter filter)返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
public boolean mkdir()创建此抽象路径名指定的目录。
public boolean mkdirs()创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
public boolean setLastModified(long time)设置由此抽象路径名所指定的文件或目录的最后一次修改时间。
public boolean setReadOnly()标记此抽象路径名指定的文件或目录,以便只可对其进行读操作。
public static File createTempFile(String prefix, String suffix, File directory) throws IOException在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
public static File createTempFile(String prefix, String suffix) throws IOException在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
public int compareTo(File pathname)按字母顺序比较两个抽象路径名。
public int compareTo(Object o)按字母顺序比较抽象路径名与给定对象。
public boolean equals(Object obj)测试此抽象路径名与给定对象是否相等。
public String toString()返回此抽象路径名的路径名字符串。

例:

import java.io.File;
public class Filetests{
public static void main(String[] args) {
File file = new File("E:\\Hello.txt");
if(file.exists()) { //如果文件存在
String name = file.getName();
long len = file.length();
boolean hid = file.isHidden();
boolean abso = file.isAbsolute();
System.out.println("名称:"+name);
System.out.println("长度:"+len);
System.out.println("是否是隐藏文件:"+ hid);
System.out.println("是否为绝对路径名:"+abso);
}
}
}

运行结果如下:

名称:Hello.txt
长度:0
是否是隐藏文件:false
是否为绝对路径名:true

文件输入/输出流


FileInputStream与FileOutputStream

InputStream(输入流):输入流是用来读入数据的.

OutputStream(输出流):输出流是用来写出数据的。

FileInputStream

构造方法:

public FileInputStream(String name);
public FileInputStream(File file);

常用方法:

方法描述
public int read();从此输入流中读取一个数据字节
public int read(byte[] b);从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中
public int read(byte[] b,int off,int len);从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。off:目标数组 b 中的起始偏移量。
例:
import java.io.FileInputStream;
public class FileIn {
public static void main(String[] args){
String out=null;
try {
int size=0;
byte[] buffer=new byte[1024];
FileInputStream fis=new FileInputStream("FileIn.txt");
while((size=fis.read(buffer))!=-1){
out=new String(buffer, 0, size);
System.out.println(out);
}
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

FileOutputStream

构造方法:

方法描述
public FileOutputStream(File file);创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
public FileOutputStream(File file,boolean append);创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
public FileOutputStream(String name);创建一个向具有指定名称的文件中写入数据的输出文件流。
public FileOutputStream(String name,boolean append);创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。

常用的方法:

方法描述
public void write(int b);向文件中写入一个字节大小的数据
public void write(byte[] b);将 b.length 个字节从指定 byte 数组写入此文件输出流中。
public void write(byte[] b,int off,int len);指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。

例:

import java.io.FileOutputStream;
public class Filed {
public static void main(String[] args){
try { String font="输出流是用来写入数据的!";
FileOutputStream fos = new FileOutputStream("Filed.txt");
fos.write(font.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

FileReader和FileWriter


FileReader

FileReader类继承自InputStreamReader类,它自己只提供了几个构造方法,它的构造方法中又通过super来调用父类构造器以构建流对象,它本身没有再提供其他的读取流数据的方法,全部继承它的直接父类InputStreamReader,而InputStreamReader又是继承自Reader类,因此FileReader和InputStreamReader一样,都能使用read()、read(char cbuf[])、read(char cbuf[], int off, int len)方法来读取流数据。

构造方法:

方法描述
public FileReader(String name)给定要读取文件名创建一个FileReader对象
public FileReader(File file)使用File对象创建一个新的FileReader,给定要读取的File对象

FileReader方法:

方法描述
public int read() throws IOExecption读取单个字符 ,返回一个int型变量代表读取到的字符
public int read(char [] c, int offset, int len)读取字符到c数组,返回读取到字符的个数

例:

import java.io.*;
public class P13 {
public static void main(String[] args) throws Exception {
FileReader fr=new FileReader("text/test14");
int num;
while((num=fr.read())!=-1){
System.out.println("读取到的内容是:"+(char)num);
}
//关闭流
fr.close();
}
}

FileWriter

构造方法:

方法描述
FileWriter(File file)在给出 File 对象的情况下构造一个 FileWriter 对象
FileWriter(File file, boolean append)

append:如果 append 参数为 true,则将字节写入文件末尾处,相当于追加信息。如果 append 参数为 false, 则写入文件开始处。

FileWriter方法:

方法描述
public void write(int c) throws IOException写入单个字符c
public void write(char [] c, int offset, int len)写入字符数组中开始为offset长度为len的某一部分
public void write(String s, int offset, int len)写入字符串中开始为offset长度为len的某一部分

例:

import java.io.*;
public class FileReader {
public static void main(String args[]) throws IOException {
File file = new File("Hello1.txt");
file.createNewFile();
FileWriter writer = new FileWriter(file);
writer.write("read");
writer.flush();
writer.close();
FileReader fr = new FileReader(file);
char[] a = new char[100];
for (char c : a)
System.out.print(c);
fr.close();
}
}

运行结果如下:

read

评论区