File类的使用
Java程序如何访问文件?通过 java.io.File 类
使用File类需要先创建文件对象 File file=new File(String pathname);
,创建时在构造函数中指定物理文件或目录,然后通过文件对象的方法操作文件或目录的属性。
\ 是特殊字符,要使用需要转义 \\
File 类常用方法
方法名称 | 说明 |
---|---|
boolean exists() | 判断文件或目录是否存在 |
boolean isFile() | 判断是否是文件 |
boolean isDirectory() | 判断是否是目录 |
String getPath() | 返回此对象表示的文件的相对路径名 |
String getAbsolutePath() | 返回此对象表示的文件的绝对路径 |
String getName() | 返回此对象指定的文件或目录 |
boolean createNewFile() | 创建名称的空文件,不创建文件夹 |
long length() | 返回文件的长度,单位为字节,文件不存在则返回0L |
File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 |
static File[] listRoots() | 列出可用文件系统根 |
boolean mkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 |
使用示例:
import java.io.File;import java.io.IOException;public class TestFile { public static void main(String[] args) { //创建File对象 传入文件的路径 File file=new File("D:\\a.txt"); //创建File对象 传入文件夹的路径 File dir=new File("D:/word"); //判断是否存在 if(file.exists()) { if(file.isFile()) { //getName()获取名字 System.out.println(file.getName()+" 是文件"); }else if(file.isDirectory()){ System.out.println(file.getName()+" 是目录"); } }else { System.out.println(file.getName()+" 不存在!"); try { //创建文件 file.createNewFile(); System.out.println("文件大小:"+file.length()+" 字节"); } catch (IOException e) { e.printStackTrace(); } } if(dir.exists()) { if(dir.isFile()) { System.out.println(dir.getName()+" 是文件"); }else if(dir.isDirectory()) { System.out.println(dir.getName()+" 是文件夹"); //绝对路径 System.out.println(dir.getAbsolutePath()); } }else { System.out.println(dir.getName()+" 不存在!"); //创建目录 dir.mkdirs(); } } }
流
流:指一连串流动的字符,是以先进先出方式发送信息的通道
输入流:源数据流向程序(读)
输入流:程序中的数据流向目标数据源(写)
Java流的分类
按流向
输出流(OutputStream和Writer作为基类)
输入流(InputStream和Reader作为基类)
输入输出流是相对于计算机内存来说的
按照处理数据单元划分
字节流
字节输入流(InputStream基类)
字节输出流(OutputStream基类)
字符流
字符输入流(Reader基类)
字符输出流(Writer基类)
字节流是8位(1B)通用字节流,字符流是16位(2B)Unicode字符流
字节流
FileInputStream 是 InputStream 的子类
InputStream 类常用方法
方法名称 | 说明 |
---|---|
int read() | 从输入流中读取数据的下一个字节。返回0到255的int值,如果到达流的末尾,则返回-1 |
int read(byte[] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。返回读入缓冲区的总字节数,如果达到末尾则返回-1 |
int read(byte[] b,int off,int len) | 将输入流中最多 len 个数据字节读入 byte数组 |
void close() | 关闭此输入流并释放与该流关联的所有系统资源 |
int available() | 返回此输入流下一个方法调用可以不受阻塞地从此输入流读取的估计字节数 |
FileInputStream 类常用构造方法
名称 | 说明 |
---|---|
FileInputStream(File file) | 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 |
FileInputStream(String name) | 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。 |
使用 FileInputStream 读取文件
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class TestFileInputStream { public static void main(String[] args) { FileInputStream fis=null; try { fis=new FileInputStream("D:\\a.txt"); //读取结果存入StringBuffer StringBuffer sb=new StringBuffer(); System.out.println("预计读取:"+fis.available()+"字节"); //记录每次读取的长度 int len=0; //缓冲区字节数组 byte[] buff=new byte[1024]; while((len=fis.read(buff))!=-1) { System.out.println("还剩余:"+fis.available()+"字节"); sb.append(new String(buff,0,len)); } System.out.println("结果:"); System.out.println(sb); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (fis!=null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
作者:极客大全
链接:https://www.jianshu.com/p/ec1d7361c752