Java语言定义了许多类用以负责各种方式的输入或者输出,这些类都被放在java.io包中。
其中包括的主要的类如下:
1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
3. OutputStream(二进制格式操作):抽象类,基于字节的输出操作,是所有输出流的父类。定义了所有输出流都具有的共同特征。
Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。
4. Reader(文件格式操作):抽象类,基于字符的输入操作。
5. Writer(文件格式操作):抽象类,基于字符的输出操作。
6.RandomAccessFile(随机文件操作):它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。
输入流
Java输入流包括字节输入流和字符输入流。
字节输入流InputStream
InputStream类是字节输入流的抽象类,是所有字节输入流的父类,InputStream类具有如下图所示的层次结构:
InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法。
Inputstream类中的常用方法:
public abstract int read( )
:读取一个byte的数据,返回值是高位补0的int类型值。若返回值为-1说明没有读取到任何字节读取工作结束。
public int read(byte b[ ])
:读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的。
public int read(byte b[ ], int off, int len)
:从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
public int available( )
:返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用。
public long skip(long n)
:忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取 。
public int close( )
:我们在使用完后,必须对我们打开的流进行关闭。
字符输入流Reader
Java中的字符是Unicode编码的,是双字节的。InputStream是用来处理字节的,在处理字符文本时很不方便。Java为字符文本的输入提供了专门的一套类Reader。Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类。
输出流
字节输出流OutputStream
输出流OutputStream类是字节输出流的抽象类。
OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。
public abstract void write(int b)
:先将int转换为byte类型,把低字节写入到输出流中。
public void write(byte b[ ])
:将参数b中的字节写到输出流。
public void write(byte b[ ], int off, int len)
:将参数b的从偏移量off开始的len个字节写到输出流。
public void flush( )
:将数据缓冲区中数据全部输出,并清空缓冲区。
public void close( )
: 关闭输出流并释放与流相关的系统资源。
字符输出流Reader
Writer类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。
FILE类
File类是IO包中唯一代表磁盘文件本身的对象。通过File来创建,删除,重命名文件。File类对象的主要作用就是用来获取文本本身的一些信息。如文本的所在的目录,文件的长度,读写权限等等。
FILE类概述
File更应该叫做一个路径,文件路径或者文件夹路径。
FILE类构造方法
File(String pathname)
:根据一个路径得到File对象。
File(String parent, String child)
:根据一个目录和一个子文件/目录得到File对象。
File(File parent, String child)
:根据一个父File对象和一个子文件/目录得到File对象。
File类的创建功能
public boolean createNewFile()
:创建文件 如果存在这样的文件,就不创建了
public boolean mkdir()
:创建文件夹 如果存在这样的文件夹,就不创建了
public boolean mkdirs()
:创建文件夹,如果父文件夹不存在,会帮你创建出来
注意:
使用createNewFile()文件创建的时候不加.txt或者其他后缀也是文件;
使用mkdir()创建文件夹的时候,如果起的名字是比如aaa.txt也是文件夹不是文件;
如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
File类的重命名和删除功能
public boolean renameTo(File dest)
:把文件重命名为指定的文件路径。
public boolean delete()
:删除文件或者文件夹。
重命名注意事项:
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
删除注意事项:
Java中的删除不走回收站。
要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹。
File类的判断功能
public boolean isDirectory()
:判断是否是目录
public boolean isFile()
:判断是否是文件
public boolean exists()
:判断是否存在
public boolean canRead()
:判断是否可读
public boolean canWrite()
:判断是否可写
public boolean isHidden()
:判断是否隐藏
File类的获取功能
public String getAbsolutePath()
:获取绝对路径
public String getPath()
:获取路径
public String getName()
:获取名称
public long length()
:获取长度。字节数
public long lastModified()
:获取最后一次的修改时间,毫秒值
public String[] list()
:获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles()
:获取指定目录下的所有文件或者文件夹的File数组
import java.io.File;
public class Test {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
File file=new File("aa.txt");//文件默认就创建在你创建的项目下面,刷新即可看到
System.out.println(file.exists());//判断文件是否存在
file.createNewFile();//创建文件,不是文件夹
System.out.println(file.exists());//再次判断是否存在
System.out.println(file.getName());//获取文件的名字
System.out.println(file.getAbsolutePath());//获取文件的绝对路径
System.out.println(file.getPath());//获取文件的相对路径
System.out.println(file.getParent());//获取文件的父路径
System.out.println(file.canRead());//文件是否可读
System.out.println(file.canWrite());//文件是否可写
System.out.println(file.length());//文件的长度
System.out.println(file.lastModified());//文件最后一次修改的时间
System.out.println(file.isDirectory());//判断文件是否是一个目录
System.out.println(file.isHidden());//文件是否隐藏
System.out.println(file.isFile());//判断文件是否存在
}
}
文件名称过滤器的概述及使用
public String[] list()
:获取指定目录下的所有文件或者文件夹的名称数组。
public File[] listFiles()
:获取指定目录下的所有文件或者文件夹的File数组。
import java.io.File;
public class FileTest {
public static void main(String[] args){
File file=new File("D:/");//指定文件目录
String[] str=file.list();//获取指定目录下的所有文件或者文件夹的名称数组
for(String s : str){//加强for循环遍历输出
System.out.println(s);
}
}
}
import java.io.File;
public class FileTest {
public static void main(String[] args){
File file=new File("D:/");//指定文件路径
File[] f=file.listFiles();//获取指定目录下的所有文件或者文件夹的File数组
for(File fi : f){//加强for循环遍历输出
System.out.println(fi);
}
}
}
参考:
1.https://www.cnblogs.com/biehongli/p/6074713.html
2.https://www.cnblogs.com/ningvsban/p/3600185.html
3.http://www.runoob.com/java/java-file.html