자바 의 FileInputStream 과 FileOutputStream 의 기본 사용 상세 설명

9268 단어 자바 기반JavaI/O
인 풋 스 트림 과 아웃 풋 스 트림 이란 무엇 입 니까?
InputStream 과 OutputStream 은 추상 클래스 로 모든 바이트 입력 흐름 과 출력 흐름 의 부모 클래스 입 니 다.여기 서 우 리 는 먼저 두 가지 개념 을 분명하게 구분 해 야 한다.
  • InputStream (입력 흐름): 입력 흐름 은 데 이 터 를 읽 는 데 사 용 됩 니 다. ---> >>읽 기
  • OutputStream (출력 흐름): 출력 흐름 은 데 이 터 를 쓰 는 데 사 용 됩 니 다. ---> >>쓰기
  • 파일 입력 흐름 -- FileInputStream
    FileInputStream 은 파일 시스템 의 한 파일 에서 입력 바 이 트 를 가 져 옵 니 다.
    구조 방법
    //通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
    public FileInputStream(File file);
    
    //通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
    public FileInputStream(String name);

    상용 방법
    입력 흐름 에서 바이트 크기 의 데 이 터 를 읽 습 니 다.
    //从此输入流中读取一个数据字节。
    public int read();

    입력 흐름 에서 바이트 배열 을 한 번 읽 습 니 다.
    //从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
    public int read(byte[] b);
    
    //从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。off:目标数组 b 中的起始偏移量。
    public int read(byte[] b,int off,int len);

    파일 에서 데이터 읽 기:
    import java.io.FileInputStream;
    
    /**
     * FileInputStream:节点流(低级流),从文件中读入数据
     * @author Administrator
     *
     */
    public class FISDemo01 {
        public static void main(String[] args){
            String content=null;
            try {
                int size=0;
                //定义一个字节缓冲区,该缓冲区的大小根据需要来定义
                byte[] buffer=new byte[1024];
                FileInputStream fis=new FileInputStream("FOSDemo.txt");
                //循环来读取该文件中的数据
                while((size=fis.read(buffer))!=-1){
                    content=new String(buffer, 0, size);
                    System.out.println(content);
                }
            //关闭此文件输入流并释放与此流有关的所有系统资源。 
            fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    파일 출력 흐름 - FileOutput Stream
    파일 출력 흐름 은 데 이 터 를 파일 에 기록 하 는 데 사 용 됩 니 다.
    구조 방법
    //创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
    public FileOutputStream(File file);
    
    //创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
    public FileOutputStream(File file,boolean append);
    
    //创建一个向具有指定名称的文件中写入数据的输出文件流。
    public FileOutputStream(String name);
    
    //创建一个向具有指定 name 的文件中写入数据的输出文件流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。
    public FileOutputStream(String name,boolean append);
    

    상용 방법
    파일 에 바이트 크기 의 데 이 터 를 기록 합 니 다.
    //向文件中写入一个字节大小的数据
    public void write(int b);

    파일 에 바이트 배열 의 데 이 터 를 한꺼번에 기록 합 니 다.
    //将 b.length 个字节从指定 byte 数组写入此文件输出流中。
    public void write(byte[] b);
    
    //指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 
    public void write(byte[] b,int off,int len);
    

    파일 에 데이터 쓰기:
    import java.io.FileOutputStream;
    
    /**
     * FileOutputStream:节点流(低级流),向文件中写出数据 
     * @author Administrator
     *
     */
    public class FOSDemo01 {
        public static void main(String[] args){
            try {
                //向文件中写入字节数组
                String font="输出流是用来写入数据的!";
                FileOutputStream fos = new FileOutputStream("FOSDemo.txt");
                fos.write(font.getBytes());
                //关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。 如果此流有一个与之关联的通道,则关闭该通道。 
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    FileInputStream 과 FileOutputStream 을 사용 하여 파일 복 제 를 실현 합 니 다.
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    /**
     * 使用文件输入流和文件输出流实现文件的复制
     * @author Administrator
     *
     */
    public class SummaryFISAndFOS {
        public static void main(String[] args){
            /**
             * 1.先将文件中的内容读入到输入流中
             * 2.将输入流中的数据通过输出流写入到目标文件中
             * 3.关闭输入流和输出流
             */
            try {
                long begin=System.currentTimeMillis();
                //从输入流中读取数据
                FileInputStream fis=new FileInputStream("FOSDemo.txt");
                //向输出流中写入数据
                FileOutputStream fos=new FileOutputStream("FISAndFOSDest.txt");
                //先定义一个字节缓冲区,减少I/O次数,提高读写效率
                byte[] buffer=new byte[10240];
                int size=0;
                while((size=fis.read(buffer))!=-1){
                    fos.write(buffer, 0, size);
                }
                fis.close();
                fos.close();
                long end=System.currentTimeMillis();
                System.out.println("使用文件输入流和文件输出流实现文件的复制完毕!耗时:"+(end-begin)+"毫秒");
            } catch (Exception e) {
                e.printStackTrace();
            }
            //解决JNI问题(Java Native Interface)
            System.exit(0);
        }
    }

    실행 결과: 파일 입력 흐름 과 파일 출력 흐름 을 사용 하여 파일 복사 완료!소요 시간: 17 밀리초
    이상 은 기본적으로 우리 가 자주 사용 하 는 방법 에 대한 소개 입 니 다. 마지막 으로 꼭 close() 을 기억 하 세 요!
    이상 의 내용 은 저 개인의 관점 만 을 대표 합 니 다. 어떤 잘못된 점 이 있 으 면 각 분야 의 신 에 게 지적 해 주 십시오!전재 출처 를 밝 혀 주세요!감사합니다!

    좋은 웹페이지 즐겨찾기