文件File
文件和目录路径名的抽象表示形式 public static void main(String[] args) { // 是不是文件 String path = "d:"+File.separator+"a.txt";//\\ System.out.println(File.separator); File file = new File(path); if (file.isFile()) { System.out.println("是文件!"); } else { System.out.println("not file!"); } // 是不是目录 String p = "d:"+File.separator; File f = new File(p); if(f.isDirectory()){ System.out.println("是目录!"); } else { System.out.println("not Directory!"); } }
文件的基本操作
public class FileOperation { public static void main(String[] args) { try { // 实例操作一:创建一个新文件 // 在d:\\创建aa.txt文件 String path1 = "d:" + File.separator + "aa.txt"; File file1 = new File(path1); boolean flag = file1.createNewFile(); if(flag){ System.out.println(" create ok!"); }else{ System.out.println(" create no!"); } // 实例操作二:删除一个指定的文件 /*boolean del = file1.delete(); if(del){ System.out.println(" delete ok!"); }else{ System.out.println(" delete no!"); }*/ // 实例操作三:综合创建、删除文件的操作 // 实例操作四:创建一个文件夹 String pd="d:"+File.separator+"aaa"+File.separator+"bb"; File f1 = new File(pd); // f1.mkdir();//只能创建一层目录 f1.mkdirs();//既可以创建一层,也可以创建多级目录 System.out.println("文件夹创建成功!"); // 实例操作五:列出指定目录的全部文件 File[] fs = f1.listFiles(); for (File file : fs) { System.out.println(file); } String[] list = f1.list();//目录下所有文件名称 for (String s : list) { System.out.println(s); } // 实例操作六:判断一个给定的路径是否是目录 } catch (IOException e) { e.printStackTrace(); } } }
系统分隔符
在不同的操作系统中,路径的分隔符表示是不一样的,例如:
windows中使用反斜杆表示目录的分隔符:“\” ;
linux中使用正斜杆表示目录的分隔符:“/”。
File.separator(通用)
列出指定目录的全部内容
要求:
给定一个目录,要求列出此目录下的全部内容,因为给定目录可能存在子文件夹,此时要求也可以把所有的子文件夹的子文件通通列出来。
分析:
要先判断给定的路径是否是目录,之后再使用listFiles()列出一个目录中的全部内容,一个文件夹中可能包含其他的文件或子文件夹,子文件夹中也可能会包含其他的子问夹,所以此处只能采用递归的调用方式完成。
package com.jy.file; import java.io.File; public class SearchFile { public static void main(String[] args) { String path="d:"+File.separator+"a"; // String path="d:"+File.separator+"aa.txt"; SearchFile.getFile(path); } //查找目录下的所有文件 public static void getFile(String path){ File file = new File(path); if(file.exists()){//文件是否存在 if(file.isDirectory()){//路径 File[] fs = file.listFiles();//获得路径下的所有文件 if(fs.length>0){ for (File f : fs) { if(f.isFile()){ System.out.println(f);//打印文件 // System.out.println(f.getName());//打印文件名 }else{ // System.out.println(f); getFile(f.getPath());//递归调用 } } } }else{ System.out.println(file);//打印文件 } }else{ System.out.println("文件不存在!"); } } }
文件重命名,获得父路径
public static void main(String[] args) throws IOException {
/*
* // 创建文件 String path = "d:\\myFile\\aa";//目录 File p = new File(path);
* if(!p.exists()){ p.mkdirs(); } String file="my.txt";//文件 // File f =
* new File(file);
*
* File ff=new File(p, file); ff.createNewFile();
*/
/*File file1 = new File("d:\\aa\\a", "a.txt");
if (!file1.getParentFile().exists()) {// 获得父目录,判断目录是否存在
file1.getParentFile().mkdirs();// 创建父目录
file1.createNewFile(); // 创建文件
}*/
// boolean renameTo(File dest)
// 重新命名此抽象路径名表示的文件。
File f1 = new File("d:\\a.txt");
f1.renameTo(new File("e:\\aa.txt"));//既可以重命名,也可以实现剪切功能
}
流 IO Input Ouput
字节流与字符流
字节流:操作的数据,以字节为颗粒度;
输出流: OutputStream
输入流: InputStream
字符流:一字符为单位,操作数据;
输出流: Writer
输入流: Reader
能用字符流操作的,字节流都能完成;
文件字输出节流
public static void main(String[] args) throws Exception { //向d:\\a.txt中写数据 String str ="abcdefghi"; /*File file = new File("d:\\a.txt"); if(!file.exists()){ file.createNewFile(); }*/ //输出流 ,文件字节输出流 // FileOutputStream out = new FileOutputStream(file); // FileOutputStream out = new FileOutputStream("d:\\a.txt"); FileOutputStream out = new FileOutputStream("d:\\a.txt",true);//true追加,false默认值,覆盖文件中的数据 byte[] bytes = str.getBytes(); // out.write(bytes); out.write(bytes, 0, bytes.length); //关流 out.close(); }
文件字节输入流
与OutputStream类一样,InputStream本身也是一个抽象类,必须依靠其子类,如果现在是从文件中读取,子类肯定是FileInputStream。
观察FileInputStream类的构造方法: public FileInputStream(File file) throws FileNotFoundException public static void main(String[] args) { try { FileInputStream in = new FileInputStream("d:\\a.txt"); byte[] b= new byte[1024];//存文件中的数据的字节数组 // int read = in.read(b); in.read(b, 0, b.length); // System.out.println(new String(b)); System.out.println(new String(b, 0, b.length)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
文件复制
//创建文件夹, String path = "e:"+File.separator+"java_file_test"+File.separator; File file1 = new File(path); file1.mkdirs(); //创建文件 String file_name = "my.txt"; File file_my = new File(path, file_name); try { file_my.createNewFile(); } catch (IOException e) { e.printStackTrace(); } //文件复制 FileInputStream in =null; FileOutputStream out =null; String path2 = path+"test_copy.txt"; try { System.out.println(path+file_name); String path3 = path+file_name; in = new FileInputStream(path3); System.out.println(path2); out = new FileOutputStream(path2); int i =0; byte[] b = new byte[256]; while((i=in.read(b))!=-1){ out.write(b,0,i); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } }
字符流
文件字符输出流
文件字符输入流
public static void main(String[] args) throws Exception { /*String str = "aaaabbbb"; // FileWriter out = new FileWriter("d:\\aa.txt"); FileWriter out = new FileWriter("d:\\aa.txt", true);// 追加 // out.write(str.toCharArray()); out.write(str); out.close();*/ //读取 FileReader in = new FileReader("d:\\aa.txt"); int i=0;//读取数据的个数 char[] c = new char[8]; while((i=in.read(c))!=-1){ System.out.print(new String(c, 0, i)); } in.close(); }