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); 
 | 
    } 
 | 
} 
 |