Java IO 流(文件传输基础)

基本数据类型字节数

数据类型    所占字节数
int        4
float      4
double     8
long       8
character  2
short      2
byte       1 

java.io.file类

  • 该类只能用于文件类型以及大小的表示,不能访问文件内容以及对文件进行操作。
  • mac eclipse 访问文件路径是在最前面加上///

文件创建

File file = new File("///Users/eric/Downloads/eric.txt");
if(!file.exists()){
    file.createNewFile();//创建文件
    }

文件夹创建

File file = new File("///Users/eric/Downloads/eric");
if(!file.exists()){
    file.mkdirs();//创建文件夹
        }

文件类型判断

//判断file 对象是否是文件夹或文件对象
System.out.println(file.isDirectory());//mac路径表示
File file = new File("c:/Users/Eric/Desktop/emc.txt");//win路径表示
System.out.println(file.isFile());
//删除文件(文件夹)
file.delect();

文件及文件夹遍历

//dir是File对象
Stirng [] strs = dir.list(); //将文件夹中的文件名放入到数组中
File   [] file = dir.listFiles();//返回值是文件对象

RandomAccessFile

写文件

        File file = new File("c:/Users/Eric/Desktop/test.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        RandomAccessFile afile = new RandomAccessFile(file, "rw");
        String str = "成不了的佛受困于心魔";
        byte[] b = str.getBytes();
        afile.write(b, 0, b.length);
        System.out.println(afile.getFilePointer());//获得文件指针位置
//更多方法通过智能提示进行探索

读文件

  • 读文件首先要将文件指针放到首位
raf.seek(0);//将文件指针放到首位
byte [] buf = new byte[(int)raf.length()];//创建一个用于存放字节流的数组
raf.read(buf);//将文件字节流存放到字节数组中
System.out.println(Arrays.toString(buf));//将数组以字符串类型输出16进制数
String  str1 = new String(buf,"gbk");//将字节流以GBK方式进行编码输出
System.out.println(str1);
raf.close();//关闭文件

字节流

FileInputStream & FileOutputStream

  • FileInputStream
FileInputStream in = new FileInputStream(file);//创建字节流输入对象
int b,i=1;
while((b=in.read())!= -1){//等于-1说明读完
 System.out.print(Integer.toHexString(b));
if(i++ %10 == 0){
    System.err.println();
         }
}
//或者如下输出GBK编码
byte [] han = new byte[ (int) file.length()];
in.read(han);//将文件字节流读到字节数组中
String str = new String(han,"gbk");
System.out.println(str);
int i = in.read(b, off, len)//将文件从off 位读取长度len的字节存入字节数组b中,返回待读取字节数,-1表示结束
  • FileOutputStream
      File file = new File("c:/Users/Eric/Desktop/test.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        RandomAccessFile afile = new RandomAccessFile(file, "rw");
        String str = "成不了的佛受困于心魔";
        byte[] b = str.getBytes();
        afile.write(b, 0, b.length);
        System.out.println(afile.getFilePointer());//获得文件指针位置
//更多方法通过智能提示进行探索

DataOutputStream & DataInputStream

  • 是对上面两个类进行的扩展,可以直接操作一些基本数据类型,练习总结。

BufferedInputStream BufferedOutputStream

  • 字节缓冲流与字节输出流可以提高数据效率
   /**
    * 复制文件函数
    * @param srcFile
    * @param destFile
    * @throws IOException
    */
    public static void  copyFile(File srcFile, File destFile) throws IOException {
        if(!srcFile.exists()){
            throw new IllegalArgumentException(srcFile +"文件不存在");
        }
        if(!destFile.exists()){

            throw new IllegalArgumentException(destFile +"文件不存在");
        }
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
        int c;
        while((c=bis.read())!=-1){
            bos.write(c);
            bos.flush();//刷新缓冲区才能继续写
        }
    }

字符流

  • 用于操作文本文件
    文本:JAVA文本是16位无字节整数,是字符的unicode编码(双字节编码即1字符等于2字节)。
    文件:byte 的集合
    文本文件:是文本按照某种编码(utf-8/gbk…)序列成为byte的集合。

InputStreamReader & OutputStreamWriter

  • 首先要将字节流转换成字符流对象进行操作
//将字节流转换为字符流
     FileInputStream in = new FileInputStream(srcFile) ;
     InputStreamReader isr  = new InputStreamReader(in,"utf-8");
     int c;
     //read方法返回-1表示读取结束
     while((c=isr.read())!=-1){
         System.out.print((char) c);
     }
     FileOutputStream out = new FileOutputStream(destFile);
     OutputStreamWriter osd = new OutputStreamWriter(out, "gbk");
     int c;
     while((c=isr.read())!=-1){
         System.out.print((char) c);
         osd.write(c);
         osd.flush();
     }
     osd.close();

FileReader & FileWriter

     FileReader fr = new FileReader("demo/eric.txt");//后面可以放路径也可以放文件
     FileWriter fw = new FileWriter("demo/sun.txt");
     //FileWriter fw = new FileWriter("demo/sun.txt",true);追加
     int c;
     char [] buffer = new char[2056];
     while((c=fr.read(buffer,0,buffer.length))!=-1){
        fw.write(buffer,0,c);
        fw.flush();
     }
     fw.close();
     fr.close();

BufferedReader & BufferedWriter

BufferedReader br =new BufferedReader( new InputStreamReader(new FileInputStream("demo/eric.txt"), "gbk"));
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("demo/sun.txt")));
String line ;
while((line = br.readLine()) != null ){
    System.out.println(line);
bw.write(line);
bw.newLine();//字符串过滤器不认识换行符得添加
            bw.flush();
        }
    br.close();
    bw.close();

PrintWriter

BufferedReader br =new BufferedReader( new InputStreamReader(new FileInputStream("demo/eric.txt"), "gbk"));
PrintWriter pr = new PrintWriter("demo/sun.txt");
String line ;

while((line = br.readLine()) != null ){
    System.out.println(line);
    pr.println(line);
    pr.flush();
    }

br.close();
pr.close();

对象序列化与反序列化

序列化

   String file = "demo/sun.txt";
   ObjectOutputStream os = new ObjectOutputStream(new  FileOutputStream(file));
   student s = new student("eric", 12, 12);
   os.writeObject(s);
   os.flush();
   os.close();

反序列化

ObjectInputStream oi = new ObjectInputStream(new FileInputStream(file));
        student s = new student();
        s= (student) oi.readObject();
        System.out.println(s);

transient

 private  transient int age; //被transient 修饰后不会进行jvm默认的序列化
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值