目录
二、InPutStream/FileInPutStream(字节输入流)
三、OutPutStream/FileOutPutStream(字节输出流)
一、文件操作
1.1 File类概述
1.1.1 属性
1.1.2 构造方法
1.1.3 方法
下面是File类中一些常用的方法。
1.2 File类的使用
1.2.1 isDirectory()
isDirectory()方法是用来判断File对象代表的文件是否是目录。
下面为代码示例:
import java.io.File;
public class IODemo4 {
public static void main(String[] args) {
File file = new File("e:/temp");
boolean flag = file.isDirectory();
System.out.println(flag);
File file1 = new File("e:/image3.png");
Boolean flag1 = file1.isDirectory();
System.out.println(flag1);
}
}
我们看到e盘下的temp是一个目录,e盘下image3.png是一个文件。而我们通过文件资源管理器进行验证的结果也正是如此。
注意:判断是否是文件可以用isFile()来进行操作。这里就不做演示了。
1.2.2 delete()
delete()方法是用来进行文件删除的。它是一个返回值为boolean类型的函数。
下面为代码示例:
public static void main(String[] args) {
File file = new File("e:/Dog.txt");
if (file!=null) {
boolean delete = file.delete();
System.out.println(delete);
}
}
我们看见,delete()方法返回了一个true。当我们正在去e盘找Dog.txt的时候,发现它已经不存在了。说明删除成功了。
1.2.3 mkDIr()
我们使用mkDIr()方法可以创建一个一级目录。
下面为代码示例:
public static void main(String[] args) {
File file = new File("e:/111");
boolean flag = file.mkdir();;
System.out.println(flag);
}
上述代码中,我们想利用mkDir()方法在e盘下创建一个111目录。我们看见,mkDir()返回了一个true,在e盘下进行检查,确实成功创建了一个111目录。
那我们用mkDir创建多级目录会怎么样呢?
下面为代码示例:
public static void main(String[] args) {
File file = new File("e:/222/bbb");
boolean flag = file.mkdir();;
System.out.println(flag);
}
这个代码我们想要在e盘下创建多个目录,222目录下有一个bbb目录。能创建成功吗?
答案是不行,返回值为false。并且在e盘下也找不到此目录。
注意:当路径的中间目录不存在时,mkDIr()方法就无法创建成功。而mkDirs()可以解决此问题。
1.2.4 mkDirs()
mkDirs()方法是用来创建多级目录的。上面没有完成的任务就可以用它来完成。
下面为代码示例:
public static void main(String[] args) {
File file = new File("e:/222/bbb");
boolean flag = file.mkdirs();;
System.out.println(flag);
}
这个代码我们想在e盘下创建一个多级目录。222目录下有一个bbb目录。
1.2.5 get系列
get系列有很多,我们只选其中最常用的几个进行测试。
下面为代码示例:
public static void main(String[] args) throws IOException {
File file = new File("../bbb");
System.out.println(file.getName());//返回文件名
System.out.println(file.getPath());//返回抽象路径名
System.out.println(file.getAbsolutePath());//返回绝对路径
System.out.println(file.getCanonicalPath());//返回此抽象路径名的规范路径名字符串
System.out.println(file.getParent());//返回父亲目录路径
}
二、InPutStream/FileInPutStream(字节输入流)
2.1 InPutStream概述
2.1.1 方法
注意:InPutStream是一个抽象类,因此无法直接实例化。
2.2 FileInPutStream概述
FileInPutStream是InPutStream的一个实现类。
2.2.1 构造方法
2.3 示例代码
2.3.1 读一个文件,将文件里的内容打印出来
//一个一个字节读
public static void main(String[] args) throws IOException {
InputStream inputStream = new FileInputStream("e:/hello.txt");
int len = 0;
while((len = inputStream.read())!=-1){
System.out.print((char)len);
}
inputStream.close();
}
//使用byte数组读
public static void main(String[] args) throws IOException {
InputStream inputStream = new FileInputStream("e:/hello.txt");
int len = 0;
byte[] bytes = new byte[1024];
while((len = inputStream.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));
}
inputStream.close();
}
上面读文件使用了两种方法,一种是一个字节一个字节读。一个是使用byte数组读。后者的效率会更高。
注意:1. 使用完后记得close()。
2. 使用字节输入流读汉字的时候,可能会出现乱码。建议使用字符输入流读数据。
三、OutPutStream/FileOutPutStream(字节输出流)
3.1 OutPutStream概述
3.1.1 方法
注意:OutPutStream和InPutStream一样,是抽象类,无法直接实例化。因此需要具体的实现类。
3.2 FileOutPutStream概述
FileOutPutStream是OutPutStream的一个实现类。
3.2.1 构造方法
3.3 示例代码
3.3.1 向e:/test10.txt文件中写入内容
//一个一个写
public static void main(String[] args) throws IOException {
OutputStream outputStream = new FileOutputStream("e:/test10.txt");
outputStream.write('a');
outputStream.write('b');
outputStream.write('c');
outputStream.write('d');
outputStream.write('e');
outputStream.flush();
outputStream.close();
}
//直接写一个byte数组
public static void main(String[] args) throws IOException {
OutputStream outputStream = new FileOutputStream("e:/test10.txt");
byte[] bytes = {'a','b','c','d','e'};
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
}
注意:1. 最后的时候需要调用close()来关闭OutPutStream。
2. 如果用字节输出流写汉字的话,可能会出现乱码。因此建议使用字符输出流写汉字。