文件文件流(File、FileInputStream、FileOutputStream、FileWriter、FileReader)
文件流IO流详细介绍,参考博客:https://www.cnblogs.com/fwnboke/p/8529492.html
https://www.cnblogs.com/shuaiguoguo/p/8883862.html
文档,文件夹,目录 = java文件
来自java.io.File
URL:统一资源定位符
URI:统一资源标识符
// 创建文件对象 // pathname 文件的绝对路径 // CTRL+2,L 自动补全 File file = new File("D:/test.txt"); // 这个文件还在内存中在本地是存在. // 判断文件是否存在 System.out.println(file.exists()); // 判断是否为文件 System.out.println(file.isFile()); // 判断是否为目录 System.out.println(file.isDirectory()); try { if (!file.exists()) { // 调用创建文件的方法 boolean flag = file.createNewFile(); System.out.println(flag ? "成功" : "失败"); } } catch (IOException e) { e.printStackTrace(); }
//创建目录及文件的方法
File file = new File("D:/a/b/c/d/a.bat"); // 判断创建文件的目录是存在 String dir = file.getParent(); File dirFile = new File(dir); if (!dirFile.exists()) { // 创建目录使用是mkdir方法 //dirFile.mkdir(); // 创建一级目录 dirFile.mkdirs(); // 创建多级目录 } // 创建这个文件 try { boolean flag = file.createNewFile(); System.out.println(flag ? "创建成功" : "创建失败"); } catch (IOException e) { e.printStackTrace(); } // 文件属性 System.out.println("最后修改时间:"+new Date(file.lastModified())); System.out.println("文件路径:"+file.getAbsolutePath()); System.out.println("文件名称:"+file.getName()); System.out.println("文件的大小:"+file.length()); System.out.println("是否可读:"+file.canRead()); System.out.println("是否可写:"+file.canWrite()); System.out.println("是否隐藏:"+file.isHidden()); // 删除文件(文档才能直接删除,文件夹必须为空才能删除) file.delete();
/** * 列出某个目录下面的文件 */ private static void listDirFiles() { File dir = new File("C:/Windows"); // 获取c盘根目录下面所有文件名称组成数组 /*String[] list = dir.list(); for (String path : list) { System.out.println(path); }*/ System.out.println("--------------------"); // 获取C判断根目录下面所有文件 File[] listFiles = dir.listFiles(); for (File file : listFiles) { System.out.println(file.getAbsolutePath()); } }
/** * 递归方法遍历一个目录下面所有文件 */ private static void listDirAllFiles(String path) { File dir = new File(path); // 获取到path根目录下面所有文件 File[] files = dir.listFiles(); if (files != null && files.length > 0) { for (File file : files) { // 判断如果当前遍历这个是一个目录,直接继续查找该目录下面所有文件 if (file.isDirectory()) { // System.out.println(file.getAbsolutePath()); // 递归查找该目录下面所有文件 listDirAllFiles(file.getAbsolutePath()); } else { // 直接输出文件的路径 System.out.println(file.getAbsolutePath()); } } } }
@Test // 测试字节输出流写入文件内容 public void testOutStream() { // 创建一个文件 File file = new File("D:/a/b/c/d","out.txt"); try { // 只要目录存在,即使文件不存在,文件流会自动创建这个文件 FileOutputStream fos = new FileOutputStream(file); // 使用write方法把内存中内容写入到文件 fos.write("我爱我的家".getBytes()); // 关闭流 fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } @Test // 测试字节输出流写入文件内容 public void testInputStream() { // 创建一个文件 File file = new File("D:/a/b/c/d","out.txt"); try { // 创建文件输入流 FileInputStream fis = new FileInputStream(file); // 读取文件中的内容 System.out.println("可用字节数:"+fis.available()); // 定义读取内容缓冲区 byte[] buffer = new byte[fis.available()]; fis.read(buffer, 0, buffer.length); // 把字节数组转换为一个字符串 String content = new String(buffer); System.out.println(content); // 关闭流 fis.close(); } catch (Exception e) { e.printStackTrace(); } }
public void testFileWriter() { try { // 创建字符输出流, 追加写入的内容 FileWriter writer = new FileWriter("D:\\a\\b\\c\\d\\out.txt", true); // 操作流 writer.write("|我是字符流"); // 关闭流 writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testFileReader() { try { File file = new File("D:\\a\\b\\c\\d\\out.txt"); // 创建字符输入流 FileReader reader = new FileReader(file); // 操作流 char[] cbuf = new char[(int) file.length()]; reader.read(cbuf, 0, cbuf.length); String content = new String(cbuf); System.out.println(content.trim()); // 关闭流 reader.close(); } catch (IOException e) { e.printStackTrace(); } }
/** * 拷贝大文件的方法 * @param srcFile 源文件 * @param desFile 目标文件 */ private static void copyBigFile(String srcFile, String destFile) { try { // 创建文件输入流 FileInputStream in = new FileInputStream(srcFile); // 创建文件输出流 FileOutputStream out = new FileOutputStream(destFile); // 定义读取内容的缓存区 byte[] buffer = new byte[1024]; // 定义记录长度的变量 int len = 0; while((len = in.read(buffer)) != -1) { System.out.println(len); // 把循环读取到缓冲区中数据写入到目标文件中 out.write(buffer, 0, len); } // 关闭流(谁最后使用就先关闭谁) out.flush(); out.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } }