java IO笔记(File)

本篇讲述在Java IO中对文件的一些操作,在java IO中,文件是一种最常见的数据源。因此java IO对其提供了专门的IO流来进行操作。

java提供了一个类来表示文件,这个类就是file类,位于java.io.file。该类的功能十分强大,下面将一一介绍。

首先我们来看看file类的构造方法,在我使用的jdk1.7中,该类一共提供了4个构造方法,分别为:

 

  1. public File(String pathname) pathname是目标文件的路径,可以使绝对路径,也可以是相对路径。
  2. public FIle(String parent, String child) parent是父文件的路径,child是目标文件的路径,可以使绝对路径,也可以是相对路径。
  3. public File(File parent, String child)parent是父文件对象,child是目标文件的路径,可以使用绝对路径,也是是相对路径。
  4. public File(Url url)url是目标文件的url。这里的url是统一资源定位符,如果不知道的话可以查询一下资料,如今发达的互联网使我们学习东西非常的方便。
File类还提供了一些方法来帮助我们对文件进行操作,下面将列举一些常见的方法:
  1. boolean createNewFile();   创建文件,如果文件存在则返回false,否则返回true,并创建文件。
  2. boolean mkdir();   创建目录。
  3. boolean mkdirs();   创建多级目录。
  4. boolean delete();删除文件,如果是文件夹,必须保证是空文件夹才能删除成功。
  5. boolean deleteOnExit(); 删除文件,功能基本与delete方法一样,唯一的区别就是该方法不是立即执行,而是等到虚拟机运行结束的时候才真正的删除文件。
  6. boolean canExecute();判断文件是否可以执行。
  7. boolean canRead();判断文件是否可读。
  8. boolean canWrite();判断文件是否科协。
  9. boolean exists();判断文件是否存在。、
  10. boolean isDirectory();判断文件是否是目录。
  11. boolean isFile();判断文件是否是文件(不是目录)。
  12. boolean isHidden();判断文件是否是隐藏的。
  13. String getName();获取文件名。
  14. String getPath();获取文件相对路径。
  15. String getAbsolutePath();获取文件绝对路径。
  16. String getParent();返回父目录,如果没有则返回null。
  17. long lastModified();返回最后一次修改时间,单位为毫秒,可以用Date类进行转换。
  18. long length();返回文件的大小,单位是字节。
  19. boolean renameTo(File f);重命名文件,可以起到移动文件的作用,磁盘的格式影响该方法的成功率。
  20. File[] liseRoots();获取机器盘符。
  21. String[] list(FilenameFilter filter);   列出符合过滤器的所有文件名。
通过以上方法我们可以对文件系统进行丰富的操作,下面将通过代码一一展示。
private void initFile() throws Exception {
		// public File(String pathname)pathname使用绝对路径
		file1 = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file\\test.txt");
		// public File(String pathname)pathname使用相对路径
		file = new File(".\\src\\file\\test.txt");
		// public File(String parent, String child)
		file = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file","test.txt");
		// public File(URI uri)
		URI url = new URI("file:///e:/workspaceforlibgdx/IOStudy/src/file/test.txt");
		file = new File(url);
		
	}

我在指定目录下放下了test.txt文本,上面的四种初始化方式均能得到,指定文件的File对象。
 
private void doCreateAction() throws Exception{
		System.out.println("========================doCreateAction===============================");
		//在下述路径下创建文件,因为目标路径下没有该文件,所以返回true,并创建对应文件。
		file = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file\\create.txt");
		flag = file.createNewFile();
		System.out.println(flag);
		//在下述路径下创建文件夹,因为目标路径下没有该文件夹,所以返回true,并创建对应文件夹。
		file = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file\\file1");
		flag = file.mkdir();
		System.out.println(flag);
		//在下述路径下创建多级文件夹,因为目标路径下没有这些文件夹,所以返回true,并创建对应文件夹。
		file = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file\\file1\\file2\\file3");
		flag = file.mkdirs();
		System.out.println(flag);
	}


上述方法会在指定位置创建相应的文件和目录,执行后,可以看到如下打印:
 
 
 
 
private void doDeleteAction() throws Exception{
		System.out.println("=================================doDeleteAction====================================");
		//delete方法可以删除指定的文件,删除文件夹时,必须保证该文件是空文件夹,否则删除失败。
		//deleteOnExit方法同delete方法一样用于删除文件,唯一区别就是,delete方法是执行时就会删除,而该方法则是在虚拟机运行结束时才会删除。
		file = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file\\delete.txt");
		file.createNewFile();
		flag = file.delete();
		System.out.println(flag);
		file.deleteOnExit();
	}


执行上述代码可以删除指定位置的文件,执行后,可以看到如下打印:
 
 
 
private void doQueryAction() {
		System.out.println("=====================================doQueryAction==================================");
		file = new File("E:\\workspaceforlibgdx\\IOStudy\\src\\file");
		//getName方法获取文件名。
		System.out.println("file.getName:"+file.getName());
		//getPath方法获取相对路径。
		System.out.println("file.getPath:"+file.getPath());
		//getAbsolutePath方法获得绝对路径。
		System.out.println("file.getAbsolutePath:"+file.getAbsolutePath());
		//getParent方法获得父文件的路径。
		System.out.println("file.getParent:"+file.getParent());
		//lstModified方法获得最后一次修改文件的时间,返回long型,可以通过Date类进行转换。
		System.out.println("file.lastModified:"+new Date(file.lastModified()));
		//length方法返回文件的大小,单位是字节。
		System.out.println("file.length():"+file.length());
		//renameTo方法可以将该文件重命名或者移动位置,但磁盘格式有时候会影响该方法是否能执行成功
		System.out.println("file.length:"+file.renameTo(file));
		//listRoots方法可以获取系统盘符
		System.out.println("File.listRoots==================");
		File[] files = File.listRoots();
		for(File file : files){
			System.out.println(file.getPath());
		}
		//listFiles方法是列出指定目录下的所有文件
		System.out.println("file.listFiles==================");
		File[] files1 = file.listFiles();
		for(File file : files1){
			System.out.println(file.getPath());
		}
		//list方法师列出指定目录下所有文件名
		System.out.println("file.list==================");
		String[] lists = file.list();
		for(String list : lists){
			System.out.println(list);
		}
		//list(new FilenameFilter)方法可以添加过滤器来对返回的文件名践行筛选,下面是过滤出包含txt的文件
		System.out.println("file.list(new filenamefilter)==================");
		String[] lists1 = file.list(new FilenameFilter() {
			@Override
			public boolean accept(File dir, String name) {
				if(name.contains("txt")){
					return true;
				}
				return false;
			}
		});
		for(String list : lists1){
			System.out.println(list);
		}
	}


执行上述代码,可以对文件或者目录进行一些信息的查询,执行后,可以看到如下打印:
 
 
 
public void doJudgeAction(){
		System.out.println("=================================doJudgeAction====================================");
		System.out.println("file1.canExecute:"+file1.canExecute());
		System.out.println("file1.canRead:"+file1.canRead());
		System.out.println("file1.canWrite:"+file1.canWrite());
		System.out.println("file1.exists:"+file1.exists());
		System.out.println("file1.isDirectory:"+file1.isDirectory());
		System.out.println("file1.isFile:"+file1.isFile());
		System.out.println("file1.isHidden:"+file1.isHidden());
		System.out.println("file1.isAbsolute:"+file1.isAbsolute());
	}
执行上述代码,可以对文件进行一些判断,执行后得到如下打印:


 
通过上述的方法,我们再加以修改,完全可以写出一些好玩的东西,如写一个文件查找器亦或是一个文件删除工具。
 
public void doQueryAllAction() {
		Scanner scanner = new Scanner(System.in);
		String path = scanner.next();
		File root = new File(path);
		if (root.exists()) {
			queryTool(root, 0);
		} else {
			System.out.println("you type a wrong path");
		}
		scanner.close();
	}

	private ArrayList<File> queryTool(File file, int lev) {
		if (file.isFile()) {
			list.add(file);
			System.out.println("文件"+getSymbols(lev,false) + file.getName());
		} else if (file.isDirectory()) {
			System.out.println("目录"+getSymbols(lev,true) + file.getName());
			lev++;
			File[] files = file.listFiles();
			for (File temp : files) {
				queryTool(temp, lev);
			}
		}
		return list;
	}

	private String getSymbols(int number,boolean isfile) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < number; i++) {
			if(isfile){
				sb.append("-");
			}else {
				sb.append("-");
			}
		}
		return sb.toString();
	}
 
执行doQueryAllAction方法,可以根据输入的路径,罗列出指定路径下的所有文件,执行后得到如下打印:
 
 
private boolean doDeleteAllAction(){
		doQueryAllAction();
		for(File file : list){
			System.out.println("文件【"+file.getName()+"】已删除");
			file.delete();
		}
		return true;
	}

执行上述方法可以删除输入路径下的所有文件,执行后得到如下打印:
 
以上就是对于java.io中file类的一些操作了,是不是很神奇呢,java完全可以模拟我们平常对文件的一些操作,创建,移动,删除等等,下面要讲的就是如何往文件中写入数据了,这里就要用到流了。
 
//除了使用FileReader还可以使用FileInputStream进行文件读取,当然你还可以使用RandomAccessFile来进行选择性读取。
	private void doReadAction() throws Exception {
		Scanner scanner = new Scanner(System.in);
		String path = scanner.next();
		File root = new File(path);
		StringBuffer sb = new StringBuffer();
		if (root.isFile()) {
			FileReader fr = new FileReader(root);
			char[] temp = new char[1024];
			while (fr.read(temp) != -1) {
				sb.append(temp);
			}
			fr.close();
			scanner.close();
			System.out.println(sb.toString());
		}
	}

通过上述方法,可以读取指定路径下的文件(暂指文本文件),执行后,得到如下打印:
 
private void doWriteAction() throws Exception {
		Scanner scanner = new Scanner(System.in);
		String path = scanner.next();
		File root = new File(path);
		if(root.isFile()){
			FileWriter fw = new FileWriter(root);
			fw.write("java io操作 之 文件  ");
			System.out.println("文件写入完成");
			fw.close();
			scanner.close();
		}
	}

执行上述方法可以向指定文件内写入内容,执行后得到如下打印:
 
关于java io 文件的操作就暂且说到这儿吧,下面将要讲述管道的内容。
 

 

posted @ 2017-08-11 14:14  moonfish  阅读(145)  评论(0编辑  收藏  举报