• java


    FileInputStream: 用于从文件中读取内容到程序

    package io;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    public class FileInputTest {
        public static void main(String[] args){
    
            //创建流
            FileInputStream fis1 = null;
            FileInputStream fis2 = null;
            FileInputStream fis3 = null;
            FileInputStream fis4 = null;
            //放在前面声明,方便在try之后关掉,保证程序健壮性
            try {
                fis1 = new FileInputStream("C:\Users\Administrator\Desktop\test\filetest.txt");
                //可以用String或者file创建, 路径必须对,不然过不了编译
    
                int fis_i = fis1.read();   //读取一个字节,方法返回值为int
                System.out.println(fis_i);//输出字节的unicode
                //72
                char fis_c = (char)fis_i;//int可以转成char方便查看
                System.out.println(fis_c);
                //H
    
                //利用循环显示所有内容
                for(int i = fis1.read(); i != -1; i = fis1.read() ){
                    System.out.print((char)i);
                }
                System.out.println();
                //ello world.    本来应该是Hello world. ,但是H 被上面那个int i = fis.read(); 读取了,所以ii没有读到。
                //Hello I/O.     文件中的回车和符号等也可以读到
    
                fis2 = new FileInputStream("C:\Users\Administrator\Desktop\test\filetest.txt");
                byte fis2_b[] = new byte[5];
                fis2.read(fis2_b);
                for(int i = 0; i < fis2_b.length; i++ ){
                    System.out.print((char)fis2_b[i]);
                }
                System.out.println();
                //Hello
                //因为数组长度所以只存了一部分内容。
    
                for(int i = fis2.read(fis2_b); i != -1; i = fis2.read(fis2_b) ){ //fis1.read(char[])返回值为读取的字段数量,没有读取的时候返回-1
                    System.out.println("---" + new String(fis2_b) + "---" + i); //利用String(char[]) 构造方法把fis_2转化为String直接输出
                }
                //--- worl---5
                //---d.
                //H---5
                //---ello ---5
                //---I/O. ---4
                //第1次输出:空格worl
                //第2次输出:d句号回车/换行H
                //第3次输出:ello空格
                //第4次输出:I/O句号
                //总共24个字节
                //txt换行后后面有/r/n字符(回车符,换行符)
    
                fis3 = new FileInputStream("C:\Users\Administrator\Desktop\test\filetest.txt");
                Long fis3_l = fis3.skip(14);   //跳过15个字节开始读取,用于多线程读取(迅雷?),另外试了一下,可以用负数向前跳。。。也许有用?
                System.out.println(fis3_l);
                byte[] fis3_b = new byte[10];
                fis3.read(fis3_b);
                System.out.println(new String(fis3_b));//输出字节的unicode
                //15
                //Hello I/O.    直接开始第二行的读取
    
                //available
                //Inputstream.available()方法返回的值是该inputstream在不被阻塞的情况下一次可以读取到的数据长度,返回值为int
                fis4 = new FileInputStream("C:\Users\Administrator\Desktop\test\filetest.txt");
                System.out.println(fis4.available());
                byte[] fis4_b = new byte[fis4.available()];
                fis4.read(fis4_b);
                System.out.println(new String(fis4_b));
                //24
                //Hello world.
                //Hello I/O.
                //可以直接用数组全读完啦!
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) { //FileNotFoundException 继承了 IOException, 上面那个不写也行
                e.printStackTrace();
            }finally {  //使用fianlly保证流能关闭
                if(fis1 != null){
                    try {
                        fis1.close(); //关闭流
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(fis2 != null){
                    try {
                        fis2.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(fis3 != null){
                    try {
                        fis3.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(fis4 != null){
                    try {
                        fis4.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
    
        }
    }

    FileOutputStream: 往文件内写入数据

    package io;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileOutputTest {
        public static void main(String[] args){
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream("C:\Users\Administrator\Desktop\test\fileWriteTest.txt");//文件可以不存在,如果不存在则会新建一个,但是文件路径需要存在
                fos.write(97);  //byte类型
                fos.write('b'); // byte自动转化为byte
                //txt内写入了ab
                fos.flush();//以前需要写上这句才能生效,现在最新本版本不写也可以,不过为了适应各种环境最好全写上,把字节流输入文件
    
                fos = new FileOutputStream("C:\Users\Administrator\Desktop\test\fileWriteTest.txt");
                fos.write("abcd".getBytes()); //把String转化为byte[],然后传入,可以直接写入
                fos.flush();
                //txt内写入了abcd,把之前的ab覆盖了。
    
                fos = new FileOutputStream("C:\Users\Administrator\Desktop\test\fileWriteTest.txt",true);//append表示是否添加,不写默认为false也就是覆盖
                fos.write("efgh".getBytes()); //把String转化为byte[],然后传入,可以直接写入
                fos.flush();
                //abcdefgh
    
    
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    从1.5k到18k, 一个程序员的5年成长之路
    我是如何准备技术面试的
    10个惊艳的Ruby单行代码
    经典Spring面试题和答案
    数据分析应该要避免的6个错误
    代码重构的实战经验和那些坑
    勾勒物联网与大数据的数据中心路线图
    共筑Spark大数据引擎的七大工具
    es6学习总结(一)
    vue-cli搭建与vue-router(路由配置)
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11637227.html
Copyright © 2020-2023  润新知