IO学习小结

一、文件操作

1、File类:对文件的外部操作

2、RandomAccessFile类:对文件的内容操作

代码演练1:

要求:1、创建目录A,A下有目录B和C,B中有目录D和文件b.txt,D中有文件d.txt,C中有文件c.jpg

2、遍历A中所有文件和目录

3、遍历A中jpg格式的文件

4、删除A中所有内容包括A

package BlogCode;
import java.io.*;
public class 代码演练1 {
    private static Object file;
    public static void main(String[] args) {
        /**
         * "."表示当前目录
         * ".."表示上一目录
         * File.separator 表示分隔符
         *
         */
        File dir = new File("."+File.separator+"A");
        if(!dir.exists()){
            dir.mkdir();
        }
        File dir1 = new File("."+File.separator+"A"+"."+File.separator+"B"+"."+File.separator+"D");
        if(!dir1.exists()){
            dir1.mkdirs();
        }
        File dir2 = new File("."+File.separator+"A"+"."+File.separator+"C");
        if(!dir2.exists()){
            dir2.mkdirs();
        }
        File b = new File("."+File.separator+"A"+"."+File.separator+"B"+"."+File.separator+"b.txt");
        if(!b.exists()){
            try {
                b.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        File c = new File("."+File.separator+"A"+"."+File.separator+"C"+"."+File.separator+"c.jpg");
        if(!c.exists()){
            try {
                c.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        File d = new File("."+File.separator+"A"+"."+File.separator+"B"+"."+File.separator+"D"+"."+File.separator+"d.txt");
        if(!d.exists()){
            try {
                d.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        findAllFile(dir);
        findjpg(dir);
        deleteAll(dir);
    }
    private static void findjpg(File dir) {
//        FileFilter ff = new FileFilter() {
//            public boolean accept(File pathname) {
//                return pathname.getName().endsWith(".jpg");
//            }
//        };
        File[] subs = dir.listFiles();
        for(File sub:subs){
            if(sub.isFile()&&sub.getName().endsWith(".jpg")){
                System.out.println("文件.jpg:"+sub.getName());
            }else if(sub.isDirectory()){
                findjpg(sub);
            }
        }
    }
    private static void findAllFile(File dir) {
        File[] subs = dir.listFiles();
        for(File sub:subs){
            if(sub.isFile()){
                System.out.println("文件:"+sub.getName());
            }else{
                findAllFile(sub);
                System.out.println("目录:"+sub.getName());
            }
        }
    }
    private static void deleteAll(File dir) {
        File[] subs = dir.listFiles();
        for(File sub:subs){
            if(sub.isFile()){
                sub.delete();
            }else{
                deleteAll(sub);
                sub.delete();
            }
        }
        dir.delete();
    }
}

代码演练2:

要求:1、创建一个demo.txt文件并输入“你好,java!”,将全部内容复制到demo1_copy.txt中,输出“av”并将其复制到demo2_copy.txt中

package BlogCode;

import java.io.*;

public class 代码演练2 {
    public static void main(String[] args) throws IOException {
        /**
         * RandomAccessFile   用指针操作
         */
        RandomAccessFile raf = new RandomAccessFile("demo.txt", "rw");
        RandomAccessFile raf1 = new RandomAccessFile("demo1_copy1.txt", "rw");
        RandomAccessFile raf2 = new RandomAccessFile("demo1_copy2.txt", "rw");
        raf.write("你好,java!".getBytes());
        long getPointerindex = raf.getFilePointer();
        System.out.println(getPointerindex);
        raf.seek(0);
        int r =-1;
        while((r=raf.read())!=-1){
            raf1.write(r);
        }
        raf.seek(0);
        byte[] by = new byte[20];
        while(raf.read(by)!=-1){
            raf2.write(by);
            System.out.println(new String(by,7,2,"GBK"));
        }
        raf1.close();
        raf2.close();
    }
}

二、IO流

2.1.字节流:InputStream      是所有字节输入流的父类

OutputStream    是所有字节输出流的父类

2.1.1.文件流(低级流):FileInputStream   文件输入流-----------FIS

FileOutputStream 文件输出流-----------FOS

2.1.2.缓冲流:BufferedInputStream   缓冲输入流---------BIS

BufferedOutputStream 缓冲输出流---------BOS

2.1.3.对象流:ObjectInputStream  对象输入流-----------OIS

ObjectOutputStream  对象输出流-----------OOS

2.2.字符流:Reader  是所有字符输入流的父类

Writer   是所有字符输出流的父类

2.2.1.转换流:InputStreamReader  字符输入流----------ISR

OutputStreamWriter  字符输出流---------OSW

2.2.2缓冲字符流:BufferedReader  缓冲字符输入流--------BR

PrintWriter       缓冲字符输出流----------PW

代码演练3:

要求:1.用字节流将"旋转的卡特琳娜"写入文件lol.txt中,并将"卡特"输出

2.用缓冲流将"旋转的德玛西亚之力"写入文件lol1.txt中,并将文件内容复制到lol2.txt

package BlogCode;
import java.io.*;
public class 代码演练3 {
    public static void main(String[] args) throws Exception {
        FileOutputStream fos =  new FileOutputStream("lol.txt");
        fos.write("旋转的卡特琳娜".getBytes());
        FileInputStream fis = new FileInputStream("lol.txt");
        byte[] by1 = new byte[15];
        fis.read(by1);
        System.out.println(new String(by1,6,4));
        fos.close();
        fis.close();
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("lol1.txt"));
        bos.write("旋转的德玛西亚之力".getBytes());
        bos.flush();
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("lol1.txt"));
        BufferedOutputStream bos1 = new BufferedOutputStream(new FileOutputStream("lol2.txt"));
        int r=-1;
        while((r=bis.read())!=-1){
            bos1.write(r);
        }
        bos1.close();
        bos.close();
        bis.close();
    }
}

代码演练4:

要求:1.建立一个Person类,在测试类中创建一个Person对象,并将其序列化和反序列化

2.在测试类中创建一个Person对象数组,并将其序列化和反序列化

package BlogCode;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class 代码演练4 {
    /**
     * 注意要序列化的类必须实现Serializable接口,并要定义序列版本号serialVersionUID
     */
    public static void main(String[] args) throws Exception {
        Person p = new Person("miss",26);
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("pp.obj"));
        oos.writeObject(p);
        oos.close();
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("pp.obj"));
        Person p0 = (Person) ois.readObject();
        System.out.println(p0);
        ois.close();
        System.out.println("--------------------");
        Person p1 = new Person("熊大",12);
        Person p2 = new Person("熊二",13);
        Person p3 = new Person("光头强",30);
        Set<Person> s = new HashSet<Person>();
        s.add(p1);
        s.add(p2);
        s.add(p3);
        ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("pp1.obj"));
        oos1.writeObject(s);
        oos1.close();
        ObjectInputStream ois1 = new ObjectInputStream(new FileInputStream("pp1.obj"));
        Set<Person> set = (Set)ois1.readObject();
        for(Person o:set){
            System.out.println(o);
        }
        ois1.close();
    }
}
class Person implements Serializable{
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    public Person() {
        super();
    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

代码演练5:

要求:用字符流将"我只有飞速的旋转,才能止住我的泪水,忘记你的模样"输入文件demo5.txt,并将内容输出

package BlogCode;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class 代码演练5 {
    public static void main(String[] args) throws Exception, FileNotFoundException {
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("demo5.txt"), "GBK");
        osw.write("我只有飞速的旋转,才能止住我的泪水,忘记你的模样");
        osw.close();
        InputStreamReader isr = new InputStreamReader(new FileInputStream("demo5.txt"),"GBK");
        int r =-1;
        while((r=isr.read())!=-1){
            System.out.print((char)r);
        }
        isr.close();
    }
}

代码演练6:

要求:用缓冲字符流将"平生不修善果,最爱杀人放火。

忽地顿开金绳,这里扯断玉锁。

咦,钱塘江上潮信来,今日方知我是我!

--------------花和尚:鲁智深"

package BlogCode;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class 代码演练6 {
    public static void main(String[] args) throws Exception {
        FileOutputStream fos = new FileOutputStream("demo06.txt");
        OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");
        PrintWriter pw = new PrintWriter(osw,true);
        pw.println("平生不修善果,最爱杀人放火。");
        pw.println("忽地顿开金绳,这里扯断玉锁。");
        pw.println("咦,钱塘江上潮信来,今日方知我是我!");
        pw.println("                              ------------------花和尚:鲁智深");
        pw.flush();
        pw.close();
        FileInputStream fis = new FileInputStream("demo06.txt");
        InputStreamReader isr = new InputStreamReader(fis,"GBK");
        BufferedReader br = new BufferedReader(isr);
        String s = null;
        while((s=br.readLine())!=null){
            System.out.println(s);
        }
    }
}
时间: 2024-10-12 08:00:21

IO学习小结的相关文章

Java: IO 学习小结

源: 键盘 System.in 硬盘 FileStream 内存 ArrayStream 目的: 控制台 System.out 硬盘 FileStream 内存 ArrayStream 处理大文件或者多线程下载\上传 RandomAccessFile 或者内存映射文件 方便对对象的永久化存储和调用 ObjectStream 方便操作打印流 PrintWriter 和 PrintStream 序列流,对多个流进行合并 SequenceInpuntStream 管道流,输入和输出可以直接连接,通过结

git学习小结

背景:最近因为工作原因,需要将以前的代码库由bitbucket重新布置在一台服务器上,所以就学习了下git,特此记录下 在167这台机器上搭建apache,用做git server,由于以前apache都已经搭好了,所以这里只配置git server 就可以了,此处贴出配置: 服务器搭好了,来到配置中的root目录,git clone https://[email protected]/XXXX 此时,库和服务器都搭好了,用于新库测试的机器也可以从git server上克隆库了,来,我们来试试从

点滴的积累---J2SE学习小结

点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习感受 近半个月的坎坷,总算是将马士兵的<J2SE教程>视频看完了,期间一些其它的事一些不得不处理的事总是打断我的安排.看了视频之后认为东西确实都非常基础给我印象最深的是关于程序执行的内存分析.IO和线程,这谁在之前不管是学习VB.VB.NET还是C#中都没怎么设计到的东西. 首先,我想对于一个初学

2014.8.12-AKKA和Actor model 分布式开发环境学习小结

学习使用AKKA 断断续续有一年了.目前还是习惯用java来写akka下面的程序.对于原生的scala还是没有时间和兴趣去学习它. 毕竟学习一门语言需要兴趣和时间的. AKKA学习资源还是不算丰富. 看过最多的就是官方的编程手册,还有就是AKKA Essentials 这两本.  自己动手写的程序还不算多,也放在github上面. 另外,在akka编译配置.升级版本上,以及部署多台服务器组建akka cluster 方面花费了不少时间.因为项目需要,上周重新在办公室用两台mac台式机和一台thi

react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之前对react使用不多,正好我目前在做的项目也在使用react+redux,借着这个机会系统的学习下react+redux. react是什么 react是一个JavaScript类库,通过react,我们可以构建可组合的UI,也就是说,我们可以通过重用组件来组合出我们的UI.可以说react的核心便是

【DAY12】第十二天集合&泛型&IO学习笔记

hash:散列 ------------------ Hashset集合内部是通过HashMap进行实现的.使用的是HashMap中key部分. 对象在添加进集合中时,首选会对hashcode进行处理(hashcode右移16位和 自身做异或运算)得到一个经过处理的hash值,然后该值和集合的容量进行 &运算,得到介于0和集合容量值之间一个数字.该数字表示着数组的下标. 也就是该元素应该存放在哪个元素中. Map与Collection -------------- Map与Collection在

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

MogileFS学习小结

大纲: 一.关于MogileFS 二.常见分布式文件系统 三.MogileFS基本原理 四.MogileFS的实现 一.关于MogileFS 当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据量必然以几何方式增长,随着信息连接方式日益多样化,数据存储的结构也随着发生了变化.在这样的压力下使得人们不得不重新审视大量数据的存储所带来的挑战,例如:数据采集.数据存储.数据搜索.数据共享.数据传输.数据分析.数据可视化等一系列问题. 传统存储在面对海量数据存储表现出的力不从

201671010130 2016-2017-2 《Java程序设计》第四周学习小结

第四周学习小结 本次实验巩固了上次实验分隔数并求和的题,目前这个题有两种做法,一种是不断对数10求余,余数保存在sum中,然后左移一位,直到余数为零.另一种就是将数字强制转换成一个字符串数组String s=String.valueOf(num),根据方法s.toCharArray()将字符分离出来,据"x"-"0"=x,unicode码值相减即可得x的值. 父类和子类能够看两个交集,super关键字是否能够看做一个子类和超类的接口呢? 在子类中可以增加域.增加方法