1 File类
File:用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
1.1 File类的静态成员变量
import java.io.File;
public class Demo01 {
public static void main(String[] args) {
System.out.println(File.pathSeparator); //路径分隔符,在windows中为" ; " 。linux系统中为" : "。
System.out.println(File.separator); //文件名分隔符,windows中为" \ "。;linux系统中为" / "。
/*
* 若要写同时兼容两个系统的代码,路径应参考下面方法:
* 目标路径: C:\Temp
* (或)目标路径: C:/Temp
* "C" + File.separator + File.pathSeparator + "Temp"
* */
}
}
/*运行结果:
;
\
进程已结束,退出代码为 0
*/
1.2 Flie的构造方法
import java.io.File;
public class Demo02 {
public static void main(String[] args) {
File f1 = new File("D:\\下载\\HelloWorld.txt");
File f2 = new File("D:\\下载","HelloWorld.txt");
File f3 = new File(new File("D:\\下载"),"HelloWorld.txt");
//展示了File类的三种创建方法(构造器)
System.out.println(f1 + "\n" + f2 + "\n" + f3);
}
}
/*运算结果:
D:\下载\HelloWorld.txt
D:\下载\HelloWorld.txt
D:\下载\HelloWorld.txt
进程已结束,退出代码为 0
*/
1.3 File类的常用方法
文件名相关:
import java.io.File;
public class Demo03 {
public static void main(String[] args) {
File f1 = new File("D:\\下载\\HelloWorld.txt");
System.out.println(f1.getName());
System.out.println(f1.getAbsoluteFile());
System.out.println(f1.getPath());
System.out.println(f1.toString()); //toString所调用的就是getPath()方法
System.out.println(f1.getParent());
System.out.println(f1.renameTo(new File("1.txt")));
/*
String getName():返回此File对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名)。
String getPath():返回此File对象所对应的路径名。
File getAbsoluteFile():返回此File对象的绝对路径。
String getAbsolutePath():返回此File对象所对应的绝对路径名。
String getParent():返回此File对象所对应目录(最后一级子目录)的父目录名。
boolean renameTo(File newName):重命名此File对象所对应的文件或目录,如果重命名成功,则返回true;否则返回false。
* */
}
}
/*运行结果:
HelloWorld.txt
D:\下载\HelloWorld.txt
D:\下载\HelloWorld.txt
D:\下载\HelloWorld.txt
D:\下载
false
进程已结束,退出代码为 0
*/
判断相关:
public class Demo04 {
public static void main(String[] args) {
File f1 = new File("D:\\下载\\HelloWorld.txt");
System.out.println("是否存在:" + f1.exists());
System.out.println("是否为文件夹:" + f1.isDirectory());
System.out.println("是否为文件:" + f1.isFile());
System.out.println("是否可读:" + f1.canRead());
System.out.println("是否可写:" + f1.canWrite());
System.out.println("文件大小:" + f1.length());
/*
是否存在:exists()
是否是文件夹:isDirectory());
是否是文件:isFile()
文件是否可写:canWrite()
文件是否可读:canRead()
是否是绝对路径:isAbsolute()
文件长度:src1.length()// 文件的长度(字节数),文件夹没有大小概念,不能获取文件夹大小。若文件不存在,输出0
* */
}
}
/*运行结果:
是否存在:true
是否为文件夹:false
是否为文件:true
是否可读:true
是否可写:true
文件大小:5
进程已结束,退出代码为 0
*/
创建相关:
import java.io.File;
import java.io.IOException;
public class Demo05 {
public static void main(String[] args) {
File f1 = new File("D:\\下载\\Hello.txt");
try {
f1.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
boolean b = f1.delete();
System.out.println("是否删除成功:" + b);
File f2 = new File("D:\\下载\\a");
boolean b3 = f2.mkdir();
System.out.println("文件名是否创建成功:" + b3);
boolean b4 = f2.delete();
System.out.println("文件夹是否删除成功:" + b4);
/*
createNewFile():创建文件,当且仅当具有此名称的文件不存在时创建一个空文件,返回值类型为布尔值。
其声明抛出异常,需对其处理。
delete():删除文件/文件夹,返回布尔值(不会出现在回收站)
mkdir():可以创建单级空文件夹
mkdirs():可以创建一个单/多级空文件夹
* */
}
}
/*运行结果:
是否创建成功:true
是否删除成功:true
文件名是否创建成功:true
文件夹是否删除成功:true
进程已结束,退出代码为 0
*/
遍历(文件夹)目录功能
public class Demo08 {
public static void main(String[] args) {
File f1 = new File("D:\\下载\\新建文件夹");
String[] s1 = f1.list();
for (String s : s1) {
System.out.println(s);
}
File fs1[] =f1.listFiles();
for (File file : fs1) {
System.out.println(file);
}
File f2 = new File("D:\\下载\\新建文件夹\\稻香.mp3");
String[] s2 = f2.list();
for (String s : s2) {
System.out.println(s);
}
/*
* public String[] list():返回一个String数组,表示该File目录中的所有子文件或目录
* public File[] listFiles():返回一个File数组
* 若构造方法中的路径不是一个目录,或者路径不存在,会抛出空指针异常
* */
}
}
/*运行结果:
告白气球.mp3
稻香.mp3
D:\下载\新建文件夹\告白气球.mp3
D:\下载\新建文件夹\稻香.mp3
Exception in thread "main" java.lang.NullPointerException
at com.IO.Demo08.main(Demo08.java:18)
进程已结束,退出代码为 1
*/
2 IO流
2.1 IO流概述
“I”指的是input(读取)
“O”指的是output(写入)
流,指数据。流又分为字节流和字符流。
2.2 FileInputStream(字节输入流)FileOutputStream(字节输出流)
可以通过字符串类型创建输入流对象,也可以使用一个文件对象来创建一个输入流对象来读取文件。(输出流与其相同)
InputStream f = new FileInputStream("C:/java/hello");
File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);
例子:
import java.io.*;
public class Demo09 {
public static void main(String[] args) throws IOException{
File f = new File("D:\\下载\\新建文件夹\\a.txt");
OutputStream fos = new FileOutputStream(f);
byte[] write ={99,88,77,66};
for (int i : write) {
fos.write(i);
}
fos.close();
InputStream fis = new FileInputStream(f);
int size = fis.available();
for (int i = 0; i < size; i++) {
System.out.print((char) fis.read() + " ");
}
fis.close();
/*
* 字节输入流的使用步骤:
* 1.创建一个FileInputStream对象
* 2.调用FileInputStream对象中的方法read方法,读取数据
* 3.释放内存,调用close方法
* (输出流与其相似,案例如上)
* */
}
}
/*运行结果:
c X M B
进程已结束,退出代码为 0
*/
追加写:
若要使文件可以被多次输入,则在创建时应该注意FileOutputStream创建时在其后加入ture
例子:
File f = new File("D:\\下载\\新建文件夹\\a.txt");
OutputStream fos = new FileOutputStream(f,true);
2.3 字节流
一个字节一个字节的读写,效率非常低。当通过流的方式拷贝文件时,定义了一个字节数组作为缓冲区。在拷贝文件时,可以一次性读取多个字节的数据。
import java.io.*;
public class Demo11 {
public static void main(String[] args) throws IOException{
long start = System.currentTimeMillis();
method("D:\\下载\\新建文件夹\\稻香.mp3","D:\\下载\\b.mp3");
long end = System.currentTimeMillis();
System.out.println("用时:" + (end-start) + "毫秒");
}
public static void method(String src1 , String src2)throws IOException {
BufferedInputStream bis =new BufferedInputStream(new FileInputStream(src1));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(src2));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bis.close();
bos.close();
}
}
/*运行结果:
用时:8毫秒
进程已结束,退出代码为 0
*/