获取文件和目录的属性
在Java语言中,提供了获取和修改文件/目录属性的类java.io.File。File类的使用是与平台无关的,适用于不同的文件系统。在程序中,通过创建File类的对象来代表一个文件或目录,利用这个对象可以对文件或目录的属性进行有关操作。
File类的主要方法和说明
方法 | 说明 |
---|---|
File(String pathname) | 将给定路径名字字符串转换为抽象路径名来创建新的File实例 |
boolean exists() | 判断File对象对应的文件或目录是否存在 |
File getAbsoluteFile() | 获取File对象对应的绝对路径名形式 |
String getAbsolutePath() | 获取File对象对应的绝对路径名字符串 |
String getName() | 获取File对象表示的文件或目录的名称 |
boolean isAbsolute() | 判断File对象对应的抽象路径名是否为绝对路径名 |
boolean isDirectory() | 判断File对象代表的是否是一个目录 |
boolean isFile() | 判断File对象代表的文件是否是一个标准文件 |
boolean isHidden() | 判断File对象代表的文件是否是一个隐藏文件 |
long lastModified() | 获取File对象代表的文件最后一次被修改的时间 |
long length() | 获取File对象代表的文件的长度 |
String[] list() | 获取File对象对应的目录中的文件和目录列表 |
package 获取文件和目录的属性;
import java.io.File;
/**
* <p>
*
* </p>
*
* @autor:lzj
* @date:2021/8/25
*/
public class Demo01 {
public static void main(String[] args) {
String filename = "D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\获取文件和目录的属性\\testFile";//filename的绝对路径
File f1 = new File(filename);
System.out.println(filename+"是否存在:"+f1.exists());
System.out.println(filename+"是文件吗:"+f1.isFile());
System.out.println(filename+"最后的修改时间:"+f1.lastModified());
System.out.println(filename+"文件大小:"+f1.length());
String direname = "D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\获取文件和目录的属性\\testDire";
File f2 = new File(direname);
System.out.println(direname+"的绝对路径:"+ f2.getAbsolutePath());
if(f2.isDirectory()){
String[] fileList = f2.list();
System.out.println(direname+"目录中的文件和目录包括:");
for (int i = 0; i < fileList.length; i++) {
System.out.print(fileList[i]+" ");
}
}
}
}
Java中的IO流
IO流的概念
- 流(stream)是一组有序的数据序列。根据流的流动方向,可以分为输入流和输出流,根据流动的内容,可以分为字节流和字符流。
- 输入流的指向称为源,程序从指向源的输入流中读取数据。当程序开始读数据时,就会打开一个通向数据源的流,这个数据源可以是文件、内存或网络。例如:在程序中需要从文件a中读取数据,此时文件a就是数据源,在程序和文件a间的管道称为流,因为数据是从文件流向程序,所以称为输入流
- 输出流的指向是字节/字符流向的地方,程序通过向输出流中写入数据把信息传递到目的地。当程序需要写入数据时,就会打开一个流向目的地的流。例如:在程序中需要把一些数据写入文件b时,此时文件b就是数据的目的地,在程序和文件b之间的管道称为流,因为数据是从程序流向文件b,所以称为数出流
- Java语言中提供了java.io包,使得读写文件和处理的数据流非常容易
InputStream
InputStream是字节输入流的抽象类,是所有字节输入流的父类,这个类读取的是字节流。
InputStream类的常用方法
方法 | 功能 |
---|---|
FileInputStream(String name) | 通过打开一个到实际文件的连接来创建实例对象 |
int available() | 返回此输入流的数据读取方法可以读取的有效字节数 |
void close() | 关必此输入流并释放与该流相关联的所有系统资源 |
abstract int read() | 从输入流中读取下一个数据字节 |
int read(byte[] b) | 从输入流中读取一定数量的字节,并存储在数组b中 |
int read(byte[] b,int off,int len) | 将输入流中最多len个数据字节读入byte数组 |
long skip(long n) | 跳过和丢弃此输入流中n个字节的数据 |
其中,read()方法是抽象方法,便于子类根据需要实现该方法
OutPutStream
OutPutStream类是字节输出流的抽象类,是所有字节输出流的父类。该类接受的也是字节流
OutPutStream类的常用方法
方法 | 功能 |
---|---|
FileOutputStream(String name) | 创建一个向指定名称的文件中写入数据的输出文件流 |
void close() | 关闭当前输出流并释放与此流有关的所有系统资源 |
void flush() | 刷学当前输出流并强制将缓冲区的字节写入文件 |
void write(byte[] b) | 将b数组中的字节写入当前输出流 |
void write(byte[] b,int off,int len) | 将数组中下标从off开始的len个字节写入输出流 |
abstract void write(int b) | 将指定的字节写入此输出流 |
其中,write(int b)方法是抽象方法,便于子类根据需要实现该方法
字节流
FileInputStream
package 字节流.FileInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* <p>
*从文件中读取并显示文件的内容
* </p>
*
* @autor:lzj
* @date:2021/8/26
*/
public class Demo01 {
public static void main(String[] args) throws FileNotFoundException {
int rs;
byte b[] = new byte[10];
try{
File f = new File("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字节流\\FileInputStream\\in.txt");
FileInputStream fis = new FileInputStream(f);
rs = fis.read(b,0,10);
while (rs>0){
String s = new String(b,0,rs);
System.out.print(s);
rs = fis.read(b,0,10);
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileOutputStream
package 字节流.FileOutputStream;
import java.io.*;
/**
* <p>
*将文件notepad.txt的内容复制到note.txt中
* </p>
*
* @autor:lzj
* @date:2021/8/26
*/
public class Demo01 {
public static void main(String[] args) {
int rs;
byte[] b = new byte[10];
try {
FileInputStream fis = new FileInputStream("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字节流\\FileOutputStream\\notepad.txt");
FileOutputStream fos = new FileOutputStream("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字节流\\FileOutputStream\\note.txt");
System.out.println("开始复制文件内容,请稍后……");
rs = fis.read(b,0,10);
while(rs>0){
fos.write(b,0,rs);
rs = fis.read(b,0,10);
}
System.out.println("文件复制结束");
fis.close();
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
字符流
Reader
该类是用于处理字符输入流类的父类,他是一个抽象类,不能实例化它的对象。
Reader类的常用方法
方法 | 说明 | 方法 | 说明 |
---|---|---|---|
read() | 从流中读入一个字符 | reset() | 重置该流 |
read(char[]) | 从流中将一些字符读入数组 | skip(long n) | 跳过参数n指定的字符数量 |
ready() | 判断是否准备好读取此流 |
Writer
该类是处理字符输出流的父类,Write()类定义了写入字符和字符数组的方法,与Reader类、InputStream类相似,在创建对象时会自动打开流,通过显式调用close()方法关必流
Writer类的常用方法
方法 | 说明 |
---|---|
abstract void close() | 先刷新流,然后关闭该流 |
void write(char[] cbuf) | 将字符数组的内容写入流 |
void write(int c) | 向流中写入单个字符 |
void write(String str) | 向流中写入字符串 |
void write(String str,int off,int len) | 将字符串的某一部分写入流 |
FileReader
该类是Reader类的子类,它实现了从文件中读取字符数据,是文件字符输入流。
package 字符流.FileReader;
import java.io.*;
/**
* <p>
*
* </p>
*
* @autor:lzj
* @date:2021/8/26
*/
public class Demo01 {
public static void main(String[] args) {
try {
File f1 = new File("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字符流\\FileReader\\demo.txt");
FileReader f = new FileReader(f1);
int len = f.read();
while(len>=0){//如果督导文件尾,则变量len的值尾-1
System.out.print((char)len);
len = f.read();
}
f.close();
} catch (Exception e) {
e.printStackTrace();
}
}
FileWriter
该类是Writer的子类,实现了将字符数据写入文件的功能,是文件字符输出流。如果需要写入的文件不存在,则会新建该文件,否则会删除旧文件,建立新的文件。
package 字符流.FileWriter;
import java.io.*;
import java.util.Random;
/**
* <p>
*创建5个2000以内的随机数,然后存储到文件rand.txt中
* </p>
*
* @autor:lzj
* @date:2021/8/26
*/
public class Demo01 {
public static void main(String[] args) {
Random rand = new Random();
try {
FileWriter fw = new FileWriter("D:\\All workspaces\\idea-workspace\\JavaSE\\输入输出流\\src\\字符流\\FileWriter\\rand.txt");
int rs;
for (int i = 0; i < 5; i++) {
rs = rand.nextInt(2000);//产生小于2000的随机数
fw.write(String.valueOf(rs));
fw.write(",");
}
fw.write("你好,世界");
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}