I/O————字节流

Posted yeyangtao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I/O————字节流相关的知识,希望对你有一定的参考价值。

InputStream字节输入流 

OutputStream字节输出流 

用于以字节的形式读取和写入数据

 

下面是使用

字节输入流读取文件
字节输出流写入文件

 文件可能不存在,所以使用try catch

public class StreamTest {

    public static void main(String[] args) {
        //准备一个文件文件内容是LOL,用来 字节输入流读取文件
        File file1 = new File("D:\\\\lolfilder\\\\lol.exe\\\\lol.txt");
        //准备一个空文件,用来字节输出流写入文件
        File file2 = new File("D:\\\\lolfilder\\\\lol.exe\\\\lol1.txt");
        
        try {
            FileInputStream fis = new FileInputStream(file1);
            FileOutputStream fos = new FileOutputStream(file2);
            byte[] all = new byte[(int) file1.length()];
            byte[] all2 = {65,97};
            fis.read(all);
            fos.write(all2);
            for(byte temp:all) {
                System.out.println(temp);
            }
            fis.close();
            fos.close();
        } catch (Exception e) {
            
            e.printStackTrace();
        }

    }

运行结果是:"LOL"的ASCII码值

技术图片

空文件lol1.txt写入了 Aa

 

拆分文件与合并文件

拆分文件

将文件按照指定大小分割成多个文件,并且新文件的命名规则为 filename_no.txt

主要使用了FileInputStream中的read方法

技术图片

public class FileSplitTest {
    private static final int SPLIT_SIZE=100;

    public static void main(String[] args) {
         File file = new File("D:\\\\lolfilder\\\\lol.exe\\\\filesplitdemo.txt");
         splitFile(file, SPLIT_SIZE);

    }
    public static void splitFile(File file,int size) {
        try/*(FileInputStream fis = new FileInputStream(file);)
        可以将流定义在try中,当try,catch或finally结束后会自动关闭流,这是jdk7之后的技术
        
        */ {
            
            FileInputStream fis = new FileInputStream(file);
            byte []fisb = new byte[size];
            //fis.read(fisb);
            for(int i=1;fis.read(fisb, 0, size)>0;i++) {
                File subFile = new File(file.getAbsolutePath().replace(".txt",  "_" + i + ".txt"));
                FileOutputStream fos = new FileOutputStream(subFile);
                fos.write(fisb);
                fos.close();
            }
            fis.close();
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 合并文件

public static void main(String[] args) {
         int i = 1;
         //建立输入文件
         File outFile = new File("D:\\\\lolfilder\\\\lol.exe\\\\mergedfile.txt");
         try {
             //建立输出流
         FileOutputStream fos = new FileOutputStream(outFile);
         //通过i依次读取
         while(new File("D:\\\\lolfilder\\\\lol.exe\\\\filesplitdemo_"+i+".txt").exists()) {
            
                File f = new File("D:\\\\lolfilder\\\\lol.exe\\\\filesplitdemo_"+i+".txt");
                FileInputStream fis = new FileInputStream(f);
                byte[] temp = new byte[fis.available()];
                fis.read(temp);
                fos.write(temp);
                i++;
                fis.close();
            } 
         fos.close();
         }catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
         }

 

以上是关于I/O————字节流的主要内容,如果未能解决你的问题,请参考以下文章

Java SE进阶Day09 字节流字符流I/O操作属性集

I/O————字节流

java I/O流详解

输入输出(I/O)流。

Java自学-I/O 字节流

JAVA-初步认识-I/O流(字节流-FileWriter)