1. package org.jelly.util;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.FileReader;
  10. import java.io.FileWriter;
  11. import java.io.InputStream;
  12. import java.io.OutputStream;
  13. import java.io.StringReader;
  14. import java.util.ArrayList;
  15. import java.util.LinkedList;
  16. import java.util.List;
  17. import org.jelly.code.IndexCode;
  18. import org.jelly.exception.ExecutetimeException;
  19. /**
  20. * 文件经常使用的操作的工具类
  21. * @since 1.0.0
  22. */
  23. public class FileUtil {
  24.  
  25. private FileUtil(){}
  26.  
  27. private static final String LOCK = "_LOCK";
  28. private static final int BUFFER_SIZE = 1024 * 1024 / 2;
  29.  
  30. /**
  31. * <des> 文件拷贝, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
  32. * @param in InputStream
  33. * @param out OutputStream
  34. * @since 1.0.0
  35. */
  36. public static void copyFile(InputStream in, OutputStream out){
  37. try {
  38. byte[] buffer = new byte[BUFFER_SIZE];
  39. int read;
  40. while((read = in.read(buffer)) != IndexCode.EOF.toCode()){
  41. out.write(buffer, 0, read);
  42. }
  43. } catch (Throwable e) {
  44. throw new ExecutetimeException(e);
  45. } finally {
  46. closeStream(in, out);
  47. }
  48. }
  49.  
  50. /**
  51. * <des> 写出, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
  52. * @since 1.6.0
  53. */
  54. public static void write(InputStream in, OutputStream out){
  55. copyFile(in, out);
  56. }
  57.  
  58. /**
  59. * <des> 字符串内容写出, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
  60. * @since 1.6.0
  61. */
  62. public static void write(String text, OutputStream out){
  63. try {
  64. out.write(text.getBytes());
  65. } catch (Throwable e) {
  66. throw new ExecutetimeException(e);
  67. } finally {
  68. closeStream(out);
  69. }
  70. }
  71.  
  72. /**
  73. * <des> 字符串内容写出到文件, 方法调用结束或抛出异常, 都将关闭输入输出流, 输出流flush </des>
  74. * @since 1.6.0
  75. */
  76. public static void write(String text, File file){
  77. BufferedReader reader = null;
  78. BufferedWriter writer = null;
  79. try {
  80. reader = new BufferedReader(new StringReader(text));
  81. writer = new BufferedWriter(new FileWriter(file));
  82. char[] buffer = new char[BUFFER_SIZE];
  83. int read;
  84. while((read = reader.read(buffer)) != IndexCode.EOF.toCode()){
  85. writer.write(buffer, 0, read);
  86. }
  87. } catch (Throwable e) {
  88. throw new ExecutetimeException(e);
  89. } finally {
  90. closeStream(reader, writer);
  91. }
  92. }
  93.  
  94. /**
  95. * <des> 读取获得文件内容 </des>
  96. * @param pathname 文件全路径名称
  97. * @return 读取获得的文件内容
  98. * @since 1.0.0
  99. */
  100. public static String readFile(String pathname){
  101. return readFile(new File(pathname));
  102. }
  103.  
  104. /**
  105. * <des> 读取获得文件内容 </des>
  106. * @param file 文件对象
  107. * @return 读取获得的文件内容
  108. * @since 1.0.0
  109. */
  110. public static String readFile(File file){
  111. String[] contents = readLineFile(file);
  112. StringBuilder builder = new StringBuilder();
  113. for(String content : contents){
  114. builder.append(content);
  115. }
  116. return builder.toString();
  117. }
  118.  
  119. /**
  120. * <des> 按行读取文件, 文件的每一行作为数组的一个元素 </des>
  121. * @param pathname 文件全路径名称
  122. * @return 数组
  123. * @since 1.0.0
  124. */
  125. public static String[] readLineFile(String pathname){
  126. return readLineFile(new File(pathname));
  127. }
  128.  
  129. /**
  130. * <des> 按行读取文件, 文件的每一行作为数组的一个元素 </des>
  131. * @param file 文件对象
  132. * @return 数组
  133. * @since 1.0.0
  134. */
  135. public static String[] readLineFile(File file){
  136. BufferedReader reader = null;
  137. try {
  138. reader = new BufferedReader(new FileReader(file));
  139. LinkedList<String> list = new LinkedList<String>();
  140. String read;
  141. while((read = reader.readLine()) != null){
  142. list.add(read);
  143. }
  144. return ArrayUtil.asArray(list);
  145. } catch (Throwable e) {
  146. throw new ExecutetimeException(e);
  147. } finally {
  148. closeStream(reader);
  149. }
  150. }
  151.  
  152. /**
  153. * <des> 获取文件夹下全部的文件对象 </des>
  154. * @param directory 文件文件夹对象
  155. * @return 文件对象列表
  156. * @since 1.0.0
  157. */
  158. public static List<File> listFiles(File directory){
  159. return listFiles(directory, null);
  160. }
  161.  
  162. /**
  163. * <des> 获取文件夹下全部由參数指定类型的文件对象 </des>
  164. * @param source 文件文件夹对象
  165. * @param filter 期望得到的文件的后缀名称
  166. * @return 文件对象列表
  167. * @since 1.0.0
  168. */
  169. public static List<File> listFiles(File source, String filter){
  170. File[] fileList = source.listFiles();
  171. List<File> list = new ArrayList<File>();
  172. filter = filter == null ?
  173.  
  174. null : filter.toLowerCase();
  175. if(fileList != null && fileList.length > 0){
  176. for(File file : fileList){
  177. if(file.isFile()){
  178. add(list, file, filter);
  179. }else if(file.isDirectory()){
  180. list.addAll(listFiles(file, filter));
  181. }
  182. }
  183. }else if(source.isFile()){
  184. add(list, source, filter);
  185. }
  186. return list;
  187. }
  188.  
  189. /**
  190. * <des> 在參数指定的文件夹中查找文件 </des>
  191. * @param dirpath 文件文件夹全路径名称
  192. * @param filename 查找的文件名
  193. * @return 若查找的到, 则返还该文件对象, 若查找不到, 则返还null
  194. * @since 1.0.0
  195. */
  196. public static File findFile(String dirpath, String filename){
  197. return findFile(new File(dirpath), filename);
  198. }
  199.  
  200. /**
  201. * <des> 在參数指定的文件夹中查找文件 </des>
  202. * @param directory 文件文件夹对象
  203. * @param filename 查找的文件名
  204. * @return 若查找的到, 则返还该文件对象, 若查找不到, 则返还null
  205. * @since 1.0.0
  206. */
  207. public static File findFile(File directory, String filename){
  208. String filter = StringUtil.substringAfterLastWith(filename, ".");
  209. List<File> files = listFiles(directory, filter);
  210. if(files.size() == 0) return null;
  211. for(File file : files){
  212. if(file.getAbsolutePath().endsWith(filename)){
  213. return file;
  214. }
  215. }
  216. return null;
  217. }
  218.  
  219. /**
  220. * <des> 删除文件或文件夹 </des>
  221. * @param file 文件或文件文件夹对象
  222. * @since 1.0.0
  223. */
  224. public static void delete(File file){
  225. synchronized (LOCK) {
  226. if(file.isFile()){
  227. file.delete();
  228. }else if(file.isDirectory()){
  229. File[] files = file.listFiles();
  230. for(File item : files){
  231. delete(item);
  232. }
  233. }
  234. file.delete();
  235. }
  236. }
  237.  
  238. /**
  239. * <des> 创建文件夹 </des>
  240. * @param pathname 文件夹名称
  241. * @return 若文件夹不存在则创建, 若存在则直接返还true
  242. * @since 1.0.0
  243. */
  244. public static boolean createDir(String pathname){
  245. return createDir(new File(pathname));
  246. }
  247.  
  248. /**
  249. * <des> 创建文件夹 </des>
  250. * @param dir 文件夹对象
  251. * @return 若文件夹不存在则创建, 若存在则直接返还true
  252. * @since 1.0.0
  253. */
  254. public static boolean createDir(File dir){
  255. synchronized (LOCK) {
  256. if(!dir.exists()){
  257. return dir.mkdirs();
  258. }
  259. return true;
  260. }
  261. }
  262.  
  263. /**
  264. * <des> 获取FileInputStream实例 </des>
  265. * @since 1.0.0
  266. */
  267. public static FileInputStream getFileInputStream(String pathname){
  268. return getFileInputStream(new File(pathname));
  269. }
  270.  
  271. /**
  272. * <p><des> 获取FileInputStream实例 </des></p>
  273. * @since 1.0.0
  274. */
  275. public static FileInputStream getFileInputStream(File file){
  276. try {
  277. return new FileInputStream(file);
  278. } catch (FileNotFoundException e) {
  279. throw new ExecutetimeException(e);
  280. }
  281. }
  282.  
  283. /**
  284. * <p><des> 获取FileOutputStream实例 </des></p>
  285. * @since 1.0.0
  286. */
  287. public static FileOutputStream getFileOutputStream(String pathname){
  288. return getFileOutputStream(new File(pathname), false);
  289. }
  290.  
  291. /**
  292. * <p><des> 获取FileOutputStream实例 </des></p>
  293. * @since 1.0.0
  294. */
  295. public static FileOutputStream getFileOutputStream(String pathname, boolean append){
  296. return getFileOutputStream(new File(pathname), append);
  297. }
  298.  
  299. /**
  300. * <p><des> 获取FileOutputStream实例 </des></p>
  301. * @since 1.0.0
  302. */
  303. public static FileOutputStream getFileOutputStream(File file){
  304. return getFileOutputStream(file, false);
  305. }
  306.  
  307. /**
  308. * <p><des> 获取FileOutputStream实例 </des></p>
  309. * @since 1.0.0
  310. */
  311. public static FileOutputStream getFileOutputStream(File file, boolean append){
  312. try {
  313. return new FileOutputStream(file, append);
  314. } catch (FileNotFoundException e) {
  315. throw new ExecutetimeException(e);
  316. }
  317. }
  318.  
  319. // 加入文件到列表
  320. private static void add(List<File> list, File file, String filter){
  321. if(filter == null){
  322. list.add(file);
  323. }else if(file.getAbsolutePath().toLowerCase().endsWith(filter)){
  324. list.add(file);
  325. }
  326. }
  327.  
  328. }

java File文件操作共用方法整理的更多相关文章

  1. Java File文件操作 创建文件\目录,删除文件\目录

    Java手册 java.io 类 File java.lang.Object java.io.File 所有已实现的接口: Serializable, Comparable<File> p ...

  2. JAVA file文件操作

    /** *文件重命名 * @param oldname 原来的文件名 * @param newname 新文件名 */ @RequestMapping("renameFile") ...

  3. Java File 类的使用方法详解

    Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...

  4. Java File 类的使用方法详解(转)

    转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...

  5. java常见文件操作

    收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...

  6. java字符流操作flush()方法及其注意事项

    java字符流操作flush()方法及其注意事项   flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...

  7. HTML5 本地文件操作之FileSystemAPI整理(二)

    一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...

  8. File 文件操作类 大全

    File  文件操作类  大全 许多人都会对文件操作感到很难  我也是  但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴  等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦   ...

  9. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

随机推荐

  1. PTA 07-图6 旅游规划 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划   (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...

  2. tomcat404

    确认目录下有我的html文件,但仍然是404. 问题一: 指定目录下没有访问的文件,这是最常见的,也是最容易解决的.只需要将访问的文件(如:a.html)放到指定目录下即可. 问题二: 将访问的文件( ...

  3. BZOJ 3270 博物馆 ——概率DP 高斯消元

    用$F(i,j)$表示A在i,B在j的概率. 然后很容易列出转移方程. 然后可以高斯消元了! 被一个问题困扰了很久,为什么起始点的概率要加上1. (因为其他博客上都是直接写成-1,雾) 考虑初始状态是 ...

  4. 【边双连通】poj 3352 Road Construction

    http://poj.org/problem?id=3352 [题意] 给定一个连通的无向图,求最少加多少条边使得这个图变成边双连通图 [AC] //#include<bits/stdc++.h ...

  5. angular父子scope之间的访问

    1.子可以访问父的scope,也可以更新相同的scope,但父scope不会被刷新 2.父要访问子scope的方法

  6. 【bzoj4568】【Scoi2016】幸运数字 (线性基+树上倍增)

    Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一 ...

  7. 【笔记】Linux内核中的循环缓冲区

    1. 有关ring buffer的理解 1)  ring buffer位首尾相接的buffer,即类似生活中的圆形跑道: 2)  空闲空间+数据空间=ring buffer大小 3)  ring bu ...

  8. shell的函数的简单入门

    shell的函数的简单入门 语法: function funcname(){} 示例: #!/bin/bash #定义将参数转化为大写的函数 function strToUpper(){ | tr ' ...

  9. maven编码gbk的不可映射字符

    如图,老是出现这个错误,百度说是打开源文件,更改编码格式,或者是更改File Encodings 的编码格式,或者是更改java compiler --use computer为eclipse, 都不 ...

  10. DOM对象之查找标签&属性操作

    HTML DOM (文档对象模型) DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法. JavaScript对DOM进行了实现,对应于JavaScript中 ...