目录
File类
1.创建File实例
在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果希望在程序中操作文件和目录,则都可以通过 File 类来完成。File 类定义了一些方法来操作文件,如新建、删除、重命名文件和目录等。
public static void main(String[] args) {
// 创建File对象
File f1 = new File("C:\\WorkAndStudy\\java\\a\\c");
// 删除空的目录
boolean b1 = f1.delete();
System.out.println(b1);
/**
* 删除目录
* 任务:
* 删除java目录下的a目录
*/
File f2 = new File("C:\\WorkAndStudy\\java\\a");
// 注意:删除目录时,目录必须为空,否则删除失败
boolean b2 = f2.delete();
System.out.println(b2);
}
2.File类常用方法
方法名称 | 说明 |
---|---|
boolean canRead() | 测试应用程序是否能从指定的文件中进行读取 |
boolean canWrite() | 测试应用程序是否能写当前文件 |
boolean delete() | 删除当前对象指定的文件 |
boolean exists() | 测试当前 File 是否存在 |
String getAbsolutePath() | 返回由该对象表示的文件的绝对路径名 |
String getName() | 返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名) |
String getParent() | 返回当前 File 对象所对应目录(最后一级子目录)的父目录名 |
boolean isAbsolute() | 测试当前 File 对象表示的文件是否为一个绝对路径名。该方法消除了不同平台的差异,可以直接判断 file 对象是否为绝对路径。在 UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线/ ,则表明该 File 对象对应一个绝对路径;在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。 |
boolean isDirectory() | 测试当前 File 对象表示的文件是否为一个路径 |
boolean isFile() | 测试当前 File 对象表示的文件是否为一个“普通”文件 |
long lastModified() | 返回当前 File 对象表示的文件最后修改的时间 |
long length() | 返回当前 File 对象表示的文件长度 |
String[] list() | 返回当前 File 对象指定的路径文件列表 |
String[] list(FilenameFilter) | 返回当前 File 对象指定的目录中满足指定过滤器的文件列表 |
boolean mkdir() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean mkdirs() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean renameTo(File) | 将当前 File 对象指定的文件更名为给定参数 File 指定的路径名 |
字节流
字节流是由字节组成的,字符流是由字符组成的. Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据。
1.常用方法:
InputStream:
read() 读取一个字节
read(byte[]) 读取若干(数组长度)字节
available() 获取可读的字节数
close() 关闭流, 释放资源
OutputStream:\nwrite(int) 写出一个字节
write(byte[]) 写出数组中的所有字节
write(byte[],start,len);
close() 关闭流, 释放资源
-
使用文件字节流对象实现复制功能
public static void main(String[] args) throws Exception {
// 创建读取文件字节流对象
FileInputStream fis = new FileInputStream("dir/a.txt");
// 创建输出文件字节流对象
FileOutputStream fos = new FileOutputStream("dir/a_back.dat");
// 定义每次读取的大小
byte[] data = new byte[1024 * 8];
int len = -1;
// 循环读取和写入文件
while ((len = fis.read(data)) != -1) {
// 写入数据
fos.write(data, 0, len);
}
// 关闭流
fis.close();
fos.close();
}
FileInputStream: 文件字节输入流 FileInputStream从文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。 FileInputStream用于读取诸如图像数据的原始字节流。 构造方法 FileInputStream(File file) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。 FileInputStream(FileDescriptor fdObj) 通过使用文件描述符 fdObj创建 FileInputStream ,该文件描述符表示与文件系统中的实际文件的现有连接。 FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
public static void main(String[] args) throws Exception {
// 创建fileInputStream对象
FileInputStream fis = new FileInputStream("dir/a.txt");
// 常用方法
for (int i = 0; i < 10; i++) {
int read = fis.read();
System.out.println(fis.read(new byte[1024]));
System.out.println(read);
// 将输入流的指针返回到设置标记的起始处
// fis.reset();
}
// 关闭文件
fis.close();
}
public static void main(String[] args) throws Exception {
// 创建字节输出流对象
FileOutputStream fos = new FileOutputStream("dir/fos.txt", true);
// 写入数据
String str = "晓看天色,暮看云....";
fos.write(str.getBytes("utf-8"));
// 关闭文件
fos.close();
}
字符流
BufferedInputStream为另一个输入流添加了功能,即缓冲输入并支持mark和reset方法的功能。创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。 mark操作会记住输入流中的一个点,并且reset操作会导致从最近的mark操作读取的所有字节在从包含的输入流中取出新字节之前重新读取。 构造方法 Constructor 描述 BufferedInputStream(InputStream in) 创建一个 BufferedInputStream并保存其参数,输入流 in供以后使用。 BufferedInputStream(InputStream in, int size) 创建具有指定缓冲区大小的 BufferedInputStream ,并保存其参数,输入流 in供以后使用。
public static void main(String[] args) throws Exception {
// 创建字节输入流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("dir/bos.txt"));
// 创建读缓冲区大小
byte[] data = new byte[1024 * 8];
// 将读取数据转出字符串输出
bis.read(data);
String result = new String(data, "utf-8");
System.out.println(result);
// 关闭流
bis.close();
}
public class BufferedOutputStream extends FilterOutputStream该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。构造方法摘要 构造方法 Constructor 描述 BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。 BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
public static void main(String[] args) throws Exception {
// 创建流对象
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("dir/bos.txt"));
// 创建需要写入的字符串
String str = "该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节";
// 写入数据
bos.write(str.getBytes("utf-8"));
// 关闭流
bos.close();
}
BufferedReader 类主要用于辅助其他字符输入流,它带有缓冲区,可以先将一批数据读到内存缓冲区。接下来的读操作就可以直接从缓冲区中获取数据,而不需要每次都从数据源读取数据并进行字符编码转换,这样就可以提高数据的读取效率。
public static void main(String[] args) throws Exception {
// 创建字节流对象
FileInputStream fis = new FileInputStream("dir/osw.txt");
// 创建字符流对象
InputStreamReader isr = new InputStreamReader(fis, "utf-8");
// 创建缓冲流对象
BufferedReader br = new BufferedReader(isr);
// 读
String s = br.readLine();
System.out.println(s);
String s1 = br.readLine();
System.out.println(s1);
// 读取到文件末尾结果为null
String s2 = br.readLine();
System.out.println(s2);
// 关闭资源
fis.close();
isr.close();
br.close();
}