java语言基础--IO流

IO流的分类:

 

使用FileInputStream和FileOutputStream 读取和写入

  • 相对路径:在硬盘上真是存在的路径;相对java文件的路径
  • 绝对路径:相对于别的文件的路径。

FileInputStream

  • 就是将硬盘上的内容读取到内存中

 读取文件:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamTest {

    public static void main(String[] args) throws IOException {
        FileInputStream fis = null;
        try {
       //绝对路径 fis
= new FileInputStream("E:\\windowapp\\javaworkspace\\day08\\dss");
// //Resource leak: 'fis' is never closed需要关闭 // //打印内容的码值 // System.out.println(fis.read()); // System.out.println(fis.read()); // System.out.println(fis.read()); // //读取完毕之后返回-1; // System.out.println(fis.read());
// 使用循环读取; // int temp; // while ((temp = fis.read()) != -1) { // char c= (char)temp; // System.out.println(c); // } // 利用数组 每次读取2个字符  减少了内存和硬盘的联系次数,提高了效率 byte[] arr = new byte[2]; int temp; // 有参的方法的读取返回的是读取的字节数 while ((temp = fis.read(arr)) != -1) { System.out.println(new String(arr, 0, temp)); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { fis.close(); } } }

相对路径的话,就是系统会默认的以java文件的根路径即项目包为相对的来。

即以day08为比较的相对路径

还是上面的例子,我们以相对路径来读取文件:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamTest {

    public static void main(String[] args) throws IOException {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("dss");

            // 利用数组    每次读取2个字符
            byte[] arr = new byte[2];
            int temp;
            // 有参的方法的读取返回的是读取的字节数
            while ((temp = fis.read(arr)) != -1) {
                System.out.println(new String(arr, 0, temp));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            fis.close();
        }
    }
}

这样同样也可以读取到文件里面的内容。

向文件写内容:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {

    public static void main(String[] args) {
        FileOutputStream fos = null;
        try {
            //若该文件不存在,则会创建一个
            //传入true会在原来的基础上接着写,不加true的话,会代替原来的内容
            //File.separator可以作为所有系统的分割符
             fos = new FileOutputStream("dss",true);
            String msg ="hello world";
            fos.write("\n".getBytes()); 
            fos.write(msg.getBytes());
            fos.write("\n".getBytes()); 
            fos.write("java".getBytes());
            //刷新,保证内容全部写入硬盘文件
            fos.flush();
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

拷贝文件:

将dss文件拷贝到file文件夹下面;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopyTest {

    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream("dss");
            fos = new FileOutputStream("file" + File.separator + "good");
            
            byte[] arr = new byte[3];
            int temp;
            
            while((temp=fis.read(arr))!=-1) {
                fos.write(arr, 0, temp);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    }
}

利用缓冲流拷贝文件:

利用缓冲流将dss复制到file文件夹中;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferFileCopy {

    public static void main(String[] args) {
        BufferedInputStream bis =null;
        BufferedOutputStream bos = null;
        
        try {
            bis = new BufferedInputStream(new FileInputStream("dss"));
            bos = new BufferedOutputStream(new FileOutputStream("file" +File.separator+"good"));
            
            int temp ;
            while((temp=bis.read())!= -1) {
                bos.write(temp);
                
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

 缓冲流不用再定义一个数组,原因是在底层,BufferInputStream这个类已经给创建了一个长度为8192的byte数组;

 

 

 

posted on 2018-08-20 17:55  董大志  阅读(184)  评论(0)    收藏  举报

导航