| package org.yzh.commons.util; | 
|   | 
| import java.io.*; | 
| import java.nio.ByteBuffer; | 
| import java.nio.channels.FileChannel; | 
| import java.nio.charset.Charset; | 
| import java.nio.charset.StandardCharsets; | 
| import java.util.function.Function; | 
|   | 
| /** | 
|  * @author yezhihao | 
|  * https://gitee.com/yezhihao/jt808-server | 
|  */ | 
| public class IOUtils { | 
|   | 
|     public static final String Separator = System.lineSeparator(); | 
|   | 
|     public static String readIn(String classpath) { | 
|         return readIn(classpath, StandardCharsets.UTF_8); | 
|     } | 
|   | 
|     public static String readIn(String classpath, Charset charset) { | 
|         return read(Thread.currentThread().getContextClassLoader().getResourceAsStream(classpath), charset); | 
|     } | 
|   | 
|     public static String read(File file) { | 
|         return read(file, StandardCharsets.UTF_8); | 
|     } | 
|   | 
|     public static String read(File file, Charset charset) { | 
|         try (FileInputStream is = new FileInputStream(file)) { | 
|             byte[] bytes = new byte[is.available()]; | 
|             is.read(bytes); | 
|             return new String(bytes, charset); | 
|         } catch (FileNotFoundException e) { | 
|             return null; | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public static String read(InputStream is) { | 
|         return read(is, StandardCharsets.UTF_8); | 
|     } | 
|   | 
|     public static String read(InputStream is, Charset charset) { | 
|         try (BufferedReader reader = new BufferedReader(new InputStreamReader(is, charset))) { | 
|             StringBuilder result = new StringBuilder(500); | 
|             String line; | 
|             while ((line = reader.readLine()) != null) | 
|                 result.append(line).append(Separator); | 
|   | 
|             int length = result.length(); | 
|             if (length == 0) | 
|                 return null; | 
|             return result.substring(0, length - Separator.length()); | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public static void write(String source, File target) { | 
|         write(source, StandardCharsets.UTF_8, target); | 
|     } | 
|   | 
|     public static void write(String source, Charset charset, File target) { | 
|         byte[] bytes = source.getBytes(charset); | 
|         try (FileOutputStream os = new FileOutputStream(target)) { | 
|             os.write(bytes); | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public static void write(InputStream source, File target) { | 
|         int buffer_size = 8192; | 
|         try (BufferedInputStream bis = new BufferedInputStream(source, buffer_size); | 
|              FileOutputStream fos = new FileOutputStream(target)) { | 
|   | 
|             byte[] buffer = new byte[buffer_size]; | 
|             int length; | 
|   | 
|             while ((length = bis.read(buffer)) != -1) { | 
|                 fos.write(buffer, 0, length); | 
|             } | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public static void copy(String sourcePath, String targetPath) { | 
|         copy(new File(sourcePath), new File(targetPath)); | 
|     } | 
|   | 
|     public static void copy(File source, File target) { | 
|         try (FileInputStream fis = new FileInputStream(source); | 
|              FileOutputStream fos = new FileOutputStream(target); | 
|   | 
|              FileChannel ifc = fis.getChannel(); | 
|              FileChannel ofc = fos.getChannel()) { | 
|   | 
|             ByteBuffer buffer = ByteBuffer.allocate(8192); | 
|   | 
|             while (ifc.read(buffer) != -1) { | 
|                 buffer.flip();//切换为读模式 设置limit为position,并重置position为0 | 
|                 ofc.write(buffer); | 
|                 buffer.clear(); | 
|             } | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public static void foreach(File file, Function<String, Boolean> function) { | 
|         try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { | 
|             String line; | 
|             while ((line = reader.readLine()) != null) { | 
|                 if (Boolean.FALSE == function.apply(line)) | 
|                     break; | 
|             } | 
|         } catch (Exception e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|     } | 
|   | 
|     public static void delete(File file) { | 
|         if (file.isDirectory()) { | 
|             for (File child : file.listFiles()) { | 
|                 if (child.isDirectory()) { | 
|                     delete(child); | 
|                 } else { | 
|                     child.delete(); | 
|                 } | 
|             } | 
|         } | 
|         file.delete(); | 
|     } | 
|   | 
|     public static void close(AutoCloseable a) { | 
|         if (a != null) | 
|             try { | 
|                 a.close(); | 
|             } catch (Exception ignored) { | 
|             } | 
|     } | 
|   | 
|     public static void close(AutoCloseable a1, AutoCloseable a2) { | 
|         close(a1); | 
|         close(a2); | 
|     } | 
|   | 
|     public static void close(AutoCloseable a1, AutoCloseable a2, AutoCloseable a3) { | 
|         close(a1); | 
|         close(a2); | 
|         close(a3); | 
|     } | 
| } |