1.File类:
解释:File类主要就是文件在磁盘上的存储,以及在磁盘上的一些操作,如重命名,删除等。
---1.1文件的创建:
<1>createNewFile()方法:在指定位置创建一个空文件,如果文件已经存在了,那么就不会创建了。创建成功返回值为true,创建失败就返回false。
<2>mkdir()方法:在指定位置创建一个空单级文件夹,如果文件夹存在了,那么就不会创建了。创建成功就返回true,创建失败就返回false。
<3>mkdirs()方法:在指定位置创建多级空文件夹,如果文件夹存在了,那么就不会创建了。创建成功就返回true,创建失败就返回false。
例:
public class FileTechology {
public static void main(String[] args) throws IOException {
File dir=new File("E:\\a.txt");
File newDir=new File("E:\\娱乐文件夹");
File newDirs=new File("E:\\不娱乐文件夹\\娱乐文件夹");
System.out.println("创建是否成功:"+dir.createNewFile());
System.out.println(newDir.mkdir());
System.out.println(newDirs.mkdirs());
}
}
结果:
创建是否成功:true
true
true
---1.2.重命名(剪切):
renameTo(File file):重命名文件和文件夹,也可以操作非空的文件夹,目标文件如果与源文件不在同一个路径下,就相当于剪切操作,剪切对于源文件夹不能为空。
---1.3.删除:
delete():删除指定位置的文件和空的文件夹,不可以删除一个非空文件夹。
deleteOnExit():当JVM退出时,删除指定位置的文件。一般用于删除一些临时文件。
---1.4判断:
exists():判断文件和文件夹是否存在。
isFile():是否是一个文件,如果不存在,则返回false.
isDirectory():是否是一个目录,如果不存在,返回false.
isHidden():是否是一个隐藏文件还是隐藏目录。
isAbsolute():测试当前抽象路径名是否为绝对路径名。
---1.5.获取:
getName():获取文件或文件夹的名称(不包含上级路径)
getPath():返回绝对路径,可以是相对路径,但是目录要指定。
getAbsolutePath():获取文件的绝对路径,与文件是否存在没关系。
length():获取文件的大小,如果不存在长度为0.
getParent():返回此抽象路径名父目录的路径名字符串。如果不存在,那么就返回null。
lastModified():获取最后一次被修改的时间。
static File[] listRoots():列出所有的根目录。
list():返回目录下的文件或文件名,包含隐藏文件。对于文件这样操作返回null。
listFiles():返回目录下的文件或者目录对象,包含隐藏文件。对于文件这样操作返回null。
2.文件输入字节流(FileInputStream):
需要明确的是向磁盘的哪个路径下读字节数据到程序中。然后要明确我们相对程序而言,对于磁盘的数据,程序去读。然后别忘了关闭资源就完事了。
---2.1read()方法直接读单个字节方式:
public static void read(File file) throws IOException{
FileInputStream fis=new FileInputStream(file);
int content=0;
while((content=fis.read())!=-1){
System.out.print((char)content);
}
fis.close();
}
---2.2使用缓冲数组,采取循环的方式读取多个字节方式,采用read(byte[ ] buf);方法:
public static void read(File file) throws IOException{
FileInputStream fis=new FileInputStream(file);
byte[] buf=new byte[1024];//设置缓冲的字节数组
int length=0;
while((length=fis.read(buf)) !=-1){//循环读取文件,可以完整的读取文件
System.out.println(new String(buf,0,length));
}
fis.close();//关闭资源
}
3.文件输出字节流:
public static void write(String str,File file) throws IOException{
FileOutputStream fos=new FileOutputStream(file,true);
fos.write(str.getBytes());
fos.close();
}
解释:这里在FileOutputStream的构造方法中设置true,意思就是让程序写入磁盘的字符串是每次写尾接在上次写的字符串的后面,而不是覆盖,默认是以覆盖的形式。
4.实例:从E盘拷贝图片到F盘
public class CopyImage {
public static void copy(File inFile,File destFile) throws IOException{
FileInputStream fis=new FileInputStream(inFile);
FileOutputStream fos=new FileOutputStream(destFile);
int length=0;
byte[] buf=new byte[1024];
while((length=fis.read(buf))!=-1){
fos.write(buf,0,length);
}
fos.close();
fis.close();
}
public static void main(String[] args) throws IOException {
File inFile=new File("E://3.jpg");
File destFile=new File("F://3.jpg");
copy(inFile,destFile);
}
}
结果:
原文件:
拷贝后文件:
5.字节缓冲流:
解释:BufferedOutputStream和BufferedOutputStream类可以通过减少读写次数来提高输入和输出的速度。它们内部有一个缓冲区,用来提高处理效率。可以指定缓冲区的大小。其实内部也是封装了字节数组。没有指定缓冲区大小,默认的字节是8192。
注意:如果缓冲区满了时,那么使用flush();刷新方法,将数据一股脑输出。
---5.1还是上面拷贝图片的例子:
public static void copyFile(String srcPath, String destPath)
throws IOException {
// 打开输入流,输出流
FileInputStream fis = new FileInputStream(srcPath);
FileOutputStream fos = new FileOutputStream(destPath);
// 使用缓冲流
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 读取和写入信息
int len = 0;
while ((len = bis.read()) != -1) {
bos.write(len);
}
<p align="left"><span style="color:#3F7F5F;"> // </span><span style="color:#3F7F5F;">关闭流</span></p><p align="left"><span style="color:black;"> </span>bis.close();</p><span style="color:black;"> </span>bos.close();
}