java IO之字节流与字符流
JAVA IO中的所有操作类都放在java .io包中。
主要的类和接口四:File、InputStream、OutputStream、Reader、Writer、Serialzable接口
File类在整个java.io包中是一个独立的类,此类主要功能是完成与平台无关文件操作。
创建文件public boolean createNewFile() throws IOException
在D盘根目录创建singsong.txt文件
- import java.io.File;
- import java.io.IOException;
- public class FileDome {
- public static void main(String[] args) {
- File file = new File("D:\\singsong.txt");// 找到File类的实例
- try {
- file.createNewFile();// 创建文件
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
删除文件:public boolean delete()
在删除文件时,要判断文件是否存在:public boolean exists()
- public class FileDome {
- public static void main(String[] args) {
- File file = new File("D:\\singsong.txt");// 找到File类的实例
- if (file.exists()) {
- file.delete();
- System.out.println("成功删除文件");
- } else {
- System.out.println("没有此文件");
- }
- }
- }
在各个操作系统中,文件的分隔符是不一样的:
Windows:\
Linux:/
Java本身属于跨平台的语言,那么应该可以适应各个不同的平台要求。那么为了解决可以自动适应不同系统的分隔符要求,所以在File类中提供了以下几个常量:
路径分隔符:public static final String pathSeparator,“;”
分隔符:public static final String separator,“/”或者“\”
所以,对于实际的开发来说,必须使用这样的常量进行声明。
判断路径是文件还是文件夹
在程序中可以使用如下的方法进行判断:
判断是否文件夹:public boolean isDirectory()
判断是否文件:public boolean isFile()
- public class IsFileDome {
- public static void main(String[] args) {
- File file1 =new File("D:"+File.separator+"singsong.txt");
- File file2 =new File("D:"+File.separator+"javaWEB");
- System.out.println("singsong.txt = "+file1.isFile());//判断是否文件
- System.out.println("javaWEB = "+file2.isDirectory());//判断是否目录
- }
- }
列出目录中的内容
File类中提供了以下的两个方法进行目录的列表操作:
1、public String[] list() 2、public File[] listFiles()
- 1:
- public class ListFileDome {
- public static void main(String[] args) {
- File file = new File("D:" + File.separator + "javaTest");
- String path[] =file.list();//列出全部的内容,以字符串的形式
- for (int i = 0; i < path.length; i++) {
- System.out.println(path[i]);
- }
- }
- }
运行结果:
- singsong.txt
- WEB
- 2:
- import java.io.File;
- public class ListFileDome {
- public static void main(String[] args) {
- File file = new File("D:" + File.separator + "javaTest");
- File path[] = file.listFiles();// 列出全部的子文件或文件夹
- for (int i = 0; i < path.length; i++) {
- System.out.println(path[i]);
- }
- }
- }
运行结果:
- D:\javaTest\singsong.txt
- D:\javaTest\WEB
从运行结果中可以知道两个操作同样属于列表的操作,但是后者却可以列出完整的路径,实际上此时,如果想要操作文件,则肯定使用后者最为方便,因为可以找到File类的对象,实际上就找到了完整的路径。
- import java.io.File;
- public class ListFileDome {
- public static void main(String[] args) {
- File file = new File("D:" + File.separator + "javaTest");
- File path[] = file.listFiles();// 列出全部的子文件或文件夹
- for (int i = 0; i < path.length; i++) {
- System.out.print(path[i].getParent()+"--->");
- System.out.println(path[i]);
- }
- }
- }
运行结果:
- D:\javaTest--->D:\javaTest\singsong.txt
- D:\javaTest--->D:\javaTest\WEB
创建目录及文件
- import java.io.File;
- import java.io.IOException;
- public class MakeDirDome {
- public static void main(String[] args) {
- File file = new File("D:" + File.separator + "javaTestdir"
- + File.separator + "singsong" + File.separator + "test.txt");
- file.getParentFile().mkdir();// 创建路径
- try {
- file.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
列出一个目录下所有文件的路径,包括个子文件夹中的文件也都要列出
- import java.io.File;
- public class AllListFileDome {
- public static void main(String[] args) {
- File file = new File("D:" + File.separator);
- list(file);
- }
- public static void list(File file) {
- if (file.isDirectory()) {
- File lists[] = file.listFiles();
- if (lists != null) {
- for (int i = 0; i < lists.length; i++) {
- list(lists[i]);
- }
- }
- }
- System.out.println(file);
- }
- }
只能依靠递归完成。