자바 파일 기본 조작 총화

파일 클래스
  • java.io.File 은 파일 과 디 렉 터 리 의 중요 한 클래스(JDK 6 및 이전 이 유일)
  • 디 렉 터 리 도 File 클래스 로 표시 합 니 다File 류 는 운영 체제 와 무관 하지만 운영 체제 의 권한 제한 을 받는다자주 사용 하 는 방법 createNewFile,delete,exists,getAbsolutePath,getName,getParent,getPathisDirectory,isFile,length,listFiles,mkdir,mkdirs
  • File 은 구체 적 인 파일 내용 과 관련 되 지 않 고 속성 만 언급 합 니 다
  • 
    public static void main(String[] args) {
        //     
        File directory = new File("D:/temp");
        boolean directoryDoesNotExists = ! directory.exists();
        if (directoryDoesNotExists) {
            // mkdir       
            // mkdirs         
            directory.mkdirs();
    
        }
        //     
        File file = new File("D:/temp/test.txt");
        boolean fileDoesNotExsits = ! file.exists();
        if (fileDoesNotExsits) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //   directory        
        File[] files = directory.listFiles();
        for (File file1 : files) {
            System.out.println(file1.getPath());
        }
    
    }
    
    실행 결과:
    D:\temp\test.txt
    Java NIO
    자바 7 이 제기 한 NIO 패키지,새로운 파일 시스템 클래스 제시
  • Path , Files , DirectoryStream , FileVisitor , FileSystem
  • 자바.io.File 에 대한 유익 한 보충파일 복사 및 이동
    파일 상대 경로
    목록 을 옮 겨 다 니 며디 렉 터 리 삭제
    Path 류
    
    public static void main(String[] args) {
        // Path java.io.File    
        Path path = FileSystems.getDefault().getPath("D:/temp", "abc.txt");
        // D:/   1 D:/temp   2
        System.out.println(path.getNameCount());
    
        //  File toPath()    Path  
        File file = new File("D:/temp/abc.txt");
        Path path1 = file.toPath();
        System.out.println(path.compareTo(path1)); //    0     path  
        //   Path   
        Path path3 = Paths.get("D:/temp", "abc.txt");
        //         
        System.out.println("        : " + Files.isReadable(path));
    }
    
    파일 클래스
    
    public static void main(String[] args) {
        //     
        moveFile();
        //       
        fileAttributes();
        //     
        createDirectory();
    }
    
    private static void createDirectory() {
        Path path = Paths.get("D:/temp/test");
        try {
            //      
            if (Files.notExists(path)) {
                Files.createDirectory(path);
            } else {
                System.out.println("       ");
            }
            Path path2 = path.resolve("a.java");
            Path path3 = path.resolve("b.java");
            Path path4 = path.resolve("c.txt");
            Path path5 = path.resolve("d.jpg");
            Files.createFile(path2);
            Files.createFile(path3);
            Files.createFile(path4);
            Files.createFile(path5);
    
            //          
            DirectoryStream<Path> listDirectory = Files.newDirectoryStream(path);
            for (Path path1 : listDirectory) {
                System.out.println(path1.getFileName());
            }
            //          ,      java txt     
            DirectoryStream<Path> pathsFilter = Files.newDirectoryStream(path, "*.{java,txt}");
            for (Path item : pathsFilter) {
                System.out.println(item.getFileName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @SuppressWarnings("all")
    private static void fileAttributes() {
        Path path = Paths.get("D:/temp");
        //        
        System.out.println(Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS));
        try {
            //          
            BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class);
            //        
            System.out.println(attributes.isDirectory());
            //           
            System.out.println(new Date(attributes.lastModifiedTime().toMillis()).toLocaleString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static void moveFile() {
        Path from = Paths.get("D:/temp", "text.txt");
        //       D:/temp/test/text.txt,             
        Path to = from.getParent().resolve("test/text.txt");
        try {
            //     bytes
            System.out.println(Files.size(from));
            //         ,            
            Files.move(from, to, StandardCopyOption.REPLACE_EXISTING);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    지정 한 파일 찾기
    
    public class Demo2 {
        public static void main(String[] args) {
            //    .jpg   
            String ext = "*.jpg";
            Path fileTree = Paths.get("D:/temp/");
            Search search = new Search(ext);
            EnumSet<FileVisitOption> options = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
            try {
                Files.walkFileTree(fileTree, options, Integer.MAX_VALUE, search);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    class Search implements FileVisitor {
        private PathMatcher matcher;
        public Search(String ext) {
            this.matcher = FileSystems.getDefault().getPathMatcher("glob:" + ext);
        }
    
        public void judgeFile(Path file) throws IOException {
            Path name = file.getFileName();
            if (name != null && matcher.matches(name)) {
                //      
                System.out.println("      : " + name);
            }
        }
        //        
        @Override
        public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs) throws IOException {
            return FileVisitResult.CONTINUE;
        }
        //        
        @Override
        public FileVisitResult visitFile(Object file, BasicFileAttributes attrs) throws IOException {
            judgeFile((Path) file);
            return FileVisitResult.CONTINUE;
        }
        //          
        @Override
        public FileVisitResult visitFileFailed(Object file, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
        }
        //          
        @Override
        public FileVisitResult postVisitDirectory(Object dir, IOException exc) throws IOException {
            System.out.println("postVisit: " + (Path) dir);
            return FileVisitResult.CONTINUE;
        }
    }
    
    실행 결과:
    일치 하 는 파일 이름:d.jpg
    postVisit: D:\temp\test
    postVisit: D:\temp
    자바 의 IO 패키지
    자바 읽 기와 쓰기 파일,데이터 흐름 으로 만 읽 기와 쓰기자바.io 가방 중4.567917.노드 류:파일 을 직접 읽 고 쓴다포장 류:4.567917.1.변환 류:바이트/문자/데이터 형식의 전환 류4.567917.2.장식 류:장식 노드 류노드 클래스
    파일 클래스 를 직접 조작 합 니 다InputStream,OutStream(바이트)
  • FileInputStream , FileOutputStream
  • Reader,Writer(문자)
  • FileReader , FileWriter
  • 변환 클래스
    4.567917.문자 에서 바이트 사이 의 전환
  • InputStreamReader:파일 을 읽 을 때 바이트 가 자바 가 이해 할 수 있 는 문자 로 바 뀌 었 습 니 다
  • OutputStreamWriter:자바 는 문 자 를 바이트 로 바 꾸 어 파일 에 입력 합 니 다
  • 장식 류
    DataInputStream,DataOutputStream:패 키 징 데이터 흐름BufferedInputStream,BufferOutputStream:캐 시 바이트 흐름BufferedReader,BufferedWriter:캐 시 문자 흐름텍스트 파일 의 읽 기와 쓰기
    쓰기 동작
    
    public static void main(String[] args) {
        writeFile();
    }
    
    public static void writeFile(){
        try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/temp/demo3.txt")))) {
            bw.write("hello world");
            bw.newLine();
            bw.write("Java Home");
            bw.newLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    Demo 3.txt 파일 내용
    hello world
    Java Home
    읽 기 동작
    
    public static void main(String[] args) {
        readerFile();
    }
    
    private static void readerFile() {
        String line = "";
        try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/temp/demo3.txt")))) {
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    실행 결과:
    hello world
    Java Home
    바 이 너 리 파일 읽 기 쓰기 자바
    
    public static void main(String[] args) {
        writeFile();
    }
    
    private static void writeFile() {
        try (DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("D:/temp/test.dat")))) {
            dos.writeUTF("hello");
            dos.writeUTF("hello world is test bytes");
            dos.writeInt(20);
            dos.writeUTF("world");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    파일 내용
    hellohello world is test bytes world
    읽 기 동작
    
    public static void main(String[] args) {
       readFile();
    }
    
    private static void readFile() {
        try (DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("D:/temp/test.dat")))) {
            System.out.println(in.readUTF() + in.readUTF() + in.readInt() + in.readUTF());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    실행 결과:
    hellohello world is test bytes20world
    ZIP 파일 읽 기와 쓰기
  • zip 파일 작업 클래스:java.util.zip 패키지 중
  • java.io.InputStream,java.io.OutputStream 의 하위 클래스
  • ZipInputStream,ZipOutputStream 압축 파일 입 출력 흐름
  • ZipEntry 압축 항목다 중 파일 압축
    
    //       
    public static void main(String[] args) {
        zipFile();
    }
    public static void zipFile() {
        File file = new File("D:/temp");
        File zipFile = new File("D:/temp.zip");
        FileInputStream input = null;
        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
            //     
            zos.setComment(new String("       ".getBytes(),"UTF-8"));
    
            //     
            int temp = 0;
            //         
            if (file.isDirectory()) {
                File[] listFile = file.listFiles();
                for (int i = 0; i < listFile.length; i++) {
                        //         
                        input = new FileInputStream(listFile[i]);
                        //   Entry  
                        zos.putNextEntry(new ZipEntry(file.getName() +
                                File.separator + listFile[i].getName() ));
                        System.out.println("    : " + listFile[i].getName());
                        //     
                        while ((temp = input.read()) != -1) {
                            //     
                            zos.write(temp);
                        }
                        //      
                        input.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    메모:압축 된 폴 더 에 하위 디 렉 터 리 가 있 으 면 안 됩 니 다.그렇지 않 으 면 FileNotFound Exception:D:\temp\\test(접근 거부)를 보고 합 니 다.이것 은 input=new FileInputStream(listFile[i])때 문 입 니 다.읽 은 파일 형식 은 폴 더 로 인 한 것 입 니 다.
    여러 파일 압축 풀기
    
    //        
    public static void main(String[] args) throws Exception{
        //     zip  ,   zip        ,     Java 
        File file = new File("C:\\Users\\Wong\\Desktop\\test.zip");
    
        //                
        File outFile = null;
        //    ZipEntry  
        ZipFile zipFile = new ZipFile(file);
    
        //         
        OutputStream out = null;
        //      ,    Entry
        InputStream input = null;
        //      Entry
        ZipEntry entry = null;
        
        //        ,   ZipInputStream
        try (ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file))) {
            //          
            while ((entry = zipInput.getNextEntry()) != null) {
                System.out.println("    " + entry.getName().replaceAll("/", "") + "   ");
                //          
                outFile = new File("D:/" + entry.getName());
                
                boolean outputDirectoryNotExsits = !outFile.getParentFile().exists();
                //           
                if (outputDirectoryNotExsits) {
                    //        
                    outFile.getParentFile().mkdirs();
                }
                
                boolean outFileNotExists = !outFile.exists();
                //          
                if (outFileNotExists) {
                    if (entry.isDirectory()) {
                        outFile.mkdirs();
                    } else {
                        outFile.createNewFile();
                    }
                }
    
                boolean entryNotDirctory = !entry.isDirectory();
                if (entryNotDirctory) {
                    input = zipFile.getInputStream(entry);
                    out = new FileOutputStream(outFile);
                    int temp = 0;
                    while ((temp = input.read()) != -1) {
                        out.write(temp);
                    }
                    input.close();
                    out.close();
                    System.out.println("     ");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    자바 파일 의 기본 작업 총화 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 파일 의 기본 작업 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기