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();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/clamp7724/p/11637227.html