精华内容
下载资源
问答
  • 【IO】FileOutputStream

    千次阅读 2018-02-11 12:52:10
    一 FileOutputStream概述 FileOutputStream往文件中写入字节流,父类为OutputStream, 所以可以将FileOutputStream赋值给...FileOutputStream父类为OutputStream,其源码结构如下, 构造器: public FileOutputStre

    前言

    Github:https://github.com/yihonglei/jdk-source-code-reading(java-io)

    一 FileOutputStream 概述

    FileOutputStream往文件中写入字节流,父类为OutputStream,所以可以将FileOutputStream赋值给OutputStream使用。

    二 FileOutputStream 使用分析

    FileOutputStream父类为OutputStream,其源码结构如下,

    构造器

    • public FileOutputStream(File file) throws FileNotFoundException;
    • public FileOutputStream(File file, boolean append) throws FileNotFoundException;
    • public FileOutputStream(FileDescriptor fdObj);
    • public FileOutputStream(String name) throws FileNotFoundException;
    • public FileOutputStream(String name, boolean append) throws FileNotFoundException;

    方法

    • public void write(int b) throws IOException;
    • public void write(byte[] b) throws IOException;
    • public void write(byte[] b, int off, int len) throws IOException;
    • public void close() throws IOException;
    • public void flush() throws IOException;
    • protected void finalize() throws IOException;
    • public FileChannel getChannel();
    • public final FileDescriptor getFD() throws IOException;

    以下通过实例分析重要方法。

    write(int b)

    FileOutputStream的write(int b)将包含了待写入字节的int变量作为参数写入到当前文件输出流中。

    package com.jpeony.io.outputstream;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * write(int b):把单个字节写入到输出流中。
     *
     * @author yihonglei
     */
    public class FileOutputStream1 {
        public static void main(String[] args) {
            // 指定构造文件(如果指定文件不存在,会创建对应文件)
            File file = new File("C:\\mycode\\hello.txt");
            // 根据文件创建文件输出流
            try (OutputStream os = new FileOutputStream(file)) {
                // 创建要写入输出流的数据
                String str = "abcdefg";
                byte[] data = str.getBytes();
                // 通过write(int b)将数据写入到输出流,操作系统设备根据输出流处理到终端文件
                for (byte b : data) {
                    os.write(b);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    write(byte[] b)

    FileOutputStream的write(byte[] b)将b.length长度的字节数组写入到文件输出流中。

    package com.jpeony.io.outputstream;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * write(byte b[]):将字节数组中全部数据写入到输出流中。
     *
     * @author yihonglei
     */
    public class FileOutputStream2 {
        public static void main(String[] args) {
            // 指定构造文件(如果指定文件不存在,会创建对应文件)
            File file = new File("C:\\mycode\\hello.txt");
            // 根据文件创建文件输出流
            try (OutputStream os = new FileOutputStream(file)) {
                // 创建要写入输出流的数据
                String str = "abcdefg";
                byte[] data = str.getBytes();
                // 将数据字节数组一次行写入到FileOutputStream(文件输出流)中
                os.write(data);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    write(byte[] b, int off, int len)

    FileOutputStream 的 write(byte[] b, int off, int len) 将字节数组 b 从 off 位置到 len 位置的字节写入到文件输出流中。

    package com.jpeony.io.outputstream;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * write(byte b[], int off, int len):把字节数据中从offset位置开始,length个字节的数据写入到输出流。
     *
     * @author yihonglei
     */
    public class FileOutputStream3 {
        public static void main(String[] args) {
            // 指定构造文件(如果指定文件不存在,会创建对应文件)
            File file = new File("C:\\mycode\\hello.txt");
            // 根据文件创建文件输出流
            try (OutputStream os = new FileOutputStream(file)) {
                // 创建要写入输出流的数据
                String str = "abcdefg";
                byte[] data = str.getBytes();
                // 从offset位置开始,length个字节的数据写入到输出流
                os.write(data, 1, data.length);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    flush()

    当你往FileOutputStream里写数据的时候,这些数据有可能会缓存在内存中。

    在之后的某个时间,比如,每次都只有X份数据可写,或者FileOutputStream关闭的时候,才会真正地写入磁盘。

    当FileOutputStream没被关闭,而你又想确保写入到FileOutputStream中的数据写入到磁盘中,可以调用flush()方法,

    该方法可以保证所有写入到FileOutputStream的数据全部写入到磁盘中。

    三 文件内容的覆盖(Override)和追加(Appending)

    当我们创建了一个指向已存在文件的FileOutputStream,你可以选择覆盖整个文件,

    或者在文件末尾追加内容。通过使用不同的构造函数可以实现不同的目的。

    其中一个构造函数取文件名作为参数,会覆盖任何此文件名指向的文件。

    OutputStream output = new FileOutputStream("C:\\mycode\\hello.txt");

    另外一个构造函数取2个参数:文件名和一个布尔值,布尔值表明你是否需要覆盖文件,

    如果为true,表示将文件内容追加到已存在文件,否则,覆盖掉已存在文件。

    构造函数源码:

    public FileOutputStream(File file, boolean append) throws FileNotFoundException;

    构造函数例子:

    OutputStream output = new FileOutputStream("C:\\mycode\\hello.txt", true); // 内容追加到文件

    OutputStream output = new FileOutputStream("C:\\mycode\\hello.txt", false); // 不追加,而是覆盖掉文件

    追加到文件

    package com.jpeony.io.outputstream;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * 在finally语句块中关闭流,此方案虽然能关闭流,但是并不完美。
     *
     * @author yihonglei
     */
    public class FileOutputStream4 {
        public static void main(String[] args) {
            // 指定构建文件
            File file = new File("C:\\mycode\\hello.txt");
            OutputStream os = null;
            try {
                // 创建文件输出流
                os = new FileOutputStream(file);
                // 创建要写入输出流的数据
                String str = "abcdefg";
                byte[] data = str.getBytes();
                // 将数据字节数组一次行写入到FileOutputStream(文件输出流)中
                os.write(data);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    // 关闭输出流
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    覆盖掉文件

    package com.jpeony.io.outputstream;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    /**
     * FileOutputStream(File file, boolean append)的append设置为false,覆盖掉文件。
     * 如果为false,与FileOutputStream(File)构造器一致。
     *
     * @author yihonglei
     */
    public class FileOutputStream5 {
    
        public static void main(String[] args) {
            // 指定构建源文件
            File file = new File("C:\\mycode\\hello.txt");
            // 根据文件创建不可以追加文件内容的文件输出流
            try (OutputStream os = new FileOutputStream(file, false)) {
                // 要写入的数据,转化为字节数组
                String str = "abcdefg";
                byte[] bytes = str.getBytes();
                // 将字节数组写入到输出流,如果多执行几次,会发现文件内容并没有改变,每次都被覆盖掉了
                os.write(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

     

    展开全文
  • 父类 输入流 输出流 字节流 字节输入流InputStream 字节输出流OutputStream 字符流 字符输入流Reader 字符输出流Writer package JAVA_Test7; import java.io.FileOutputStream; import java.io....

    JAVA文件输出流FileOutputStream

    父类

    输入流输出流
    字节流字节输入流
    InputStream
    字节输出流
    OutputStream
    字符流字符输入流
    Reader
    字符输出流
    Writer
    package JAVA_Test7;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * * `public FileOutputStream(File file)`:创建文件输出流以写入由指定的 File对象表示的文件。
     * * `public FileOutputStream(String name)`: 创建文件输出流以指定的名称写入文件。
     * FileOutputStream构造函数会自动创建一个新文件a.text并写入字节数据
     *
     */
    public class OutPutStream {
        public static void main(String[] args) throws IOException {
            FileOutputStream fo = new FileOutputStream("F:\\Users\\xm\\下载\\文件\\day09_字节流、字符流\\a.text");
            fo.write(97);
            fo.write(98);
            fo.write(99);
            byte [] bytes = "你好".getBytes();
            fo.write(bytes);
        }
    }
    
    

    在这里插入图片描述

    FileOutputStream默认创建一个新文件覆盖可能存在的同名文件,那么如何不覆盖追加写入数据?
    构造方法FileOutputStream(File file, boolean append)
    FileOutputStream(String name, boolean append)

    第二个参数改为true即可

     FileOutputStream fo = new FileOutputStream("F:\\Users\\xm\\下载\\文件\\day09_字节流、字符流\\a.text",true);
    
    

    在这里插入图片描述

    展开全文
  • FileOutputStream

    千次阅读 2016-11-15 07:02:51
     --------| OutputStream 是所有输出字节流 的父类。 抽象类  -----------| FileOutStream 向文件输出数据的输出字节流。   FileOutputStream如何使用呢? 1. 找到目标文件 2. 建立数据的输出通道。 3. 把...
    输出字节流:
    
     
     --------| OutputStream 是所有输出字节流 的父类。  抽象类
     -----------| FileOutStream 向文件输出数据的输出字节流。
     
    FileOutputStream如何使用呢?
    1. 找到目标文件
    2. 建立数据的输出通道。
    3. 把数据转换成字节数组写出。
    4. 关闭资源

    FileOutputStream要注意的细节:
    1. 使用FileOutputStream 的时候,如果目标文件不存在,那么会自动创建目标文件对象。 
    2. 使用FileOutputStream写数据的时候,如果目标文件已经存在,那么会先清空目标文件中的数据,然后再写入数据。
    3.使用FileOutputStream写数据的时候, 如果目标文件已经存在,需要在原来数据基础上追加数据的时候应该使用new FileOutputStream(file,true)构造函数,第二参数为true。
    4.使用FileOutputStream的write方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是
    把低八位的二进制数据写出,其他二十四位数据全部丢弃。
     
    00000000-000000000-00000001-11111111   511  

    11111111---> -1 

    public class Demo1 {
    	
    	public static void main(String[] args) throws IOException {
    		writeTest3();
    	}
    	
    	
    	//使用字节数组把数据写出。
    	public static void writeTest3() throws IOException{
    		//找到目标文件
    		File file = new File("F:\\b.txt");
    		//建立数据输出通道
    		FileOutputStream fileOutputStream = new FileOutputStream(file);
    		//把数据写出。
    		String data = "abc";
    		byte[] buf = data.getBytes();
    		fileOutputStream.write(buf, 0, 3); // 0 从字节数组的指定索引值开始写, 2:写出两个字节。
    
    		//关闭资源
    		fileOutputStream.close();
    	}
    		
    	
    	
    	//使用字节数组把数据写出。
    	public static void writeTest2() throws IOException{
    		//找到目标文件
    		File file = new File("F:\\b.txt");
    		//建立数据输出通道
    		FileOutputStream fileOutputStream = new FileOutputStream(file,true);
    		//把数据写出。
    		String data = "\r\nhello world";
    		fileOutputStream.write(data.getBytes());
    		//关闭资源
    		fileOutputStream.close();
    	}
    	
    	
    	
    	//每次只能写一个字节的数据出去。
    	public static void writeTest1() throws IOException{
    		//找到目标文件
    		File file = new File("F:\\b.txt");
    		//建立数据的输出通道
    		FileOutputStream fileOutputStream = new FileOutputStream(file);
    		//把数据写出
    		fileOutputStream.write('h');
    		fileOutputStream.write('e');
    		fileOutputStream.write('l');
    		fileOutputStream.write('l');
    		fileOutputStream.write('o');
    		//关闭资源
    		fileOutputStream.close();
    		
    		
    	}
    	
    	
    }
    4.使用FileOutputStream的write方法写数据的时候,虽然接收的是一个int类型的数据,但是真正写出的只是一个字节的数据,只是
    把低八位的二进制数据写出,其他二十四位数据全部丢弃。
     
     00000000-000000000-00000001-11111111   511

    public class Demo2 {
    	
    	
    	public static void main(String[] args) throws IOException {
    		readTest();
    	}
    	
    	public static void readTest() throws IOException{
    		//找到目标文件
    		File file = new File("F:\\c.txt");
    		//建立数据的输入通道
    		FileInputStream fileInputStream = new FileInputStream(file);
    		//建立缓冲输入读取文件数据
    		byte[] buf = new byte[4];
    		//读取文件数据
    		int length = fileInputStream.read(buf);
    		System.out.println("字节数组的内容:"+ Arrays.toString(buf));
    		//关闭资源
    		fileInputStream.close();
    		
    	}
    	
    	
    	
    	
    
    	public static void writeTest() throws FileNotFoundException, IOException {
    		//找到目标文件
    		File file = new File("F:\\c.txt");
    		//建立数据的输出通道
    		FileOutputStream fileOutputStream = new FileOutputStream(file);
    		//把数据写出
    		fileOutputStream.write(511);
    		//关闭资源
    		fileOutputStream.close();
    	}
    
    }
    需求: 拷贝一张图片。

    package cn.itcast.output;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /*
    需求: 拷贝一张图片。
    */
    public class CopyImage {
    	
    	
    	public static void main(String[] args) throws IOException {
    		//找到目标文件
    		File inFile = new File("F:\\美女\\1.jpg");
    		File destFile = new File("E:\\1.jpg");
    		//建立数据的输入输出通道
    		FileInputStream fileInputStream = new  FileInputStream(inFile);
    		FileOutputStream fileOutputStream = new FileOutputStream(destFile); //追加数据....
    		
    		//每新创建一个FileOutputStream的时候,默认情况下FileOutputStream 的指针是指向了文件的开始的位置。 每写出一次,指向都会出现相应移动。
    		//建立缓冲数据,边读边写
    		byte[] buf = new byte[1024]; 
    		int length = 0 ; 
    		while((length = fileInputStream.read(buf))!=-1){ //最后一次只剩下了824个字节
    			fileOutputStream.write(buf,0,length); //写出很多次数据,所以就必须要追加。
    		}
    		//关闭资源 原则: 先开后关,后开先关。
    		fileOutputStream.close();
    		fileInputStream.close();
    	}
    
    }
    





    展开全文
  • FileOutputStream类详解

    2020-11-18 16:36:06
    了解一个类 父类 、构造 、 然后方法 、还有常见异常 public class FileOutputStream extends OutputStream 文件输出流是用于将数据写入到输出流File或一个FileDescriptor 。 文件是否可用或可能被创建取决于底层...

    FileOutputStream继承了OutputStream(字节输出流超类)

    了解一个类 父类 、构造 、 然后方法 、还有常见异常

    public class FileOutputStream
    extends OutputStream
    文件输出流是用于将数据写入到输出流File或一个FileDescriptor 。 文件是否可用或可能被创建取决于底层平台。 
    特别是某些平台允许一次只能打开一个文件来写入一个FileOutputStream (或其他文件写入对象)。 
    在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。
    

    构造函数:

    FileOutputStream(File file) 
    创建文件输出流以写入由指定的 File对象表示的文件。  
    FileOutputStream(File file, boolean append) 
    创建文件输出流以写入由指定的 File对象表示的文件。  
    FileOutputStream(FileDescriptor fdObj) 
    创建文件输出流以写入指定的文件描述符,表示与文件系统中实际文件的现有连接。  
    FileOutputStream(String name) 
    创建文件输出流以指定的名称写入文件。  
    FileOutputStream(String name, boolean append) 
    创建文件输出流以指定的名称写入文件。  
    
    

    所有方法:

    void close() 
    关闭此文件输出流并释放与此流相关联的任何系统资源。  
    protected void finalize() 
    清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法。  
    FileChannel getChannel() 
    返回与此文件输出流相关联的唯一的FileChannel对象。  
    FileDescriptor getFD() 
    返回与此流相关联的文件描述符。  
    void write(byte[] b) 
    将 b.length个字节从指定的字节数组写入此文件输出流。  
    void write(byte[] b, int off, int len) 
    将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。  
    void write(int b) 
    将指定的字节写入此文件输出流。  
    
    

    实例代码:

    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * FileOutputStream三种写入文件方式:
     */
    public class FileOutputStreamDemo01 {
        public static void main(String[] args) throws IOException {
            //创建文件输入流 指定写入文件:
           // FileOutputStream fos=new FileOutputStream(new File("D:\\桌面\\毕业\\基本信息.txt"));
            FileOutputStream fos=new FileOutputStream("D:\\桌面\\毕业\\基本信息.txt");
    
            /**
             * 方式一:将指定字节写入文件
             */
            fos.write(97);
            fos.write(98);
            fos.write(99);
    
            /**
             * 方式二:将指定字节数组写入此文件
             */
            byte[] by={'H','E','L','L','O'};
            fos.write(by);
    
            /**
             * 方式三:指定片段写入
             */
            //最后一定记得关闭,释放资源
            fos.write(by,1,2);
            fos.close();
        }
    }
    
    

    常见异常:

    异常 
    FileNotFoundException - 如果文件存在但是是一个目录而不是常规文件,不存在但不能创建,或者由于任何其他原因无法打开 
    SecurityException - 如果安全管理器存在,并且其 checkWrite方法拒绝对该文件的写入访问。
    IOException - 如果发生I / O错误。 
    
    展开全文
  • `代码如下:`` ... import java.io.File; import java.io.FileInputStream;...import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.S...
  • InputStream和OutputStream是抽象类,是所有字节输入流和输出流的父类。这里,我们首先要分清楚两个概念: InputStream(输入流):输入流是用来读入数据的。- - - > > >读入 Output...
  • FileOutputStream extends OutputStream FileOutputStream:文件字节输出流 作用:把内存中的数据写入到硬盘的文件中 构造方法: FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的输出文件...
  • FileOutputStream是抽象类OutputStream的子类,用来对文件以字节流的方式进行写入操作。 常用方法 描述 public FileOutputStream(String name) public FileOutputStream(File file) public ...
  • JAVA基础知识之FileOutputStream

    万次阅读 多人点赞 2018-07-19 14:14:13
    一、FileOutputStream流  FileOutputStream流是指文件字节输出流,专用于输出原始字节流如图像数据等,其继承OutputStream类,拥有输出流的基本特性 public class FileOutputStream extends OutputStream{} 二...
  • import java.io.FileOutputStream; import java.io.IOException; /* * FileOutputStream * 写入文件流,使用子类对象学习父类方法(OutputStream是父类) * * 流对象使用步骤 * 1. 创建流子类的对象,绑定...
  • 输入和输出 : 参照物 都是java程序来参照 output 内存----》硬盘 input 持久化数据--》内存 字节流输出 定义:流按照方向可以分为输入和输出流 字节流 :可以操作任何数据 ...IO父类:Ou...
  • ——–| OutputStream 是所有输出字节流的父类。抽象类 ————–| FileOutputStream 向文件输出数据的输出字节流。FileOutputStream使用流程: 1. 找到目标文件。 2. 建立数据的输出通道。 3. 把数据转换成...
  • import java.io.FileOutputStream;import java.io.IOException;//写入数据文件,学习父类方法,使用子类对象public class FileOutputStreamDemo { public static void main(String[] args)throws IOException { ...
  • FileOutputStream 写入数据到文件中

    万次阅读 2018-12-20 12:43:40
    1.FileOutputStream写入数据到文件中 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamDemo { public static void main(String[] args) ...
  • 达内课程-FileInputStream/FileOutputStream
  • FileInputStream和FileOutputStream是普通字节流,于此同时的还有高效字节流,DateInputStream。两者的数据单位都为byte,适用于处理二...FileOutputStream:write()方法,从获得的数据中向文本文件写入数据,父类...
  • FileOutPutStream的使用

    千次阅读 2015-07-23 14:03:50
     * 注意:每种基类的子类都是以父类名作为后缀名。  * XxxOutputStream  * XxxInputStream  * XxxReader  * XxxWriter  * 查看FileOutputStream的构造方法:  * FileOutputStream(File file) ...
  • IO流--FileOutputStream

    2018-08-28 23:22:01
    package OutputStream; import java.io.File;...import java.io.FileOutputStream; import java.io.IOException; public class FileOutptStreamDemo { private static final String FILE_SEPARATOR = System...
  • OutputStream:是所有字节输出流的父类,其作用是:用这个流把网络数据(getOutputStream()),或者内存中的字节数组数据写到文件系统中文件系统(FileOutputStream)  由与 publicabstractclass OutputStream ...
  • java字节型(FileInputStream和FileOutputStream) FileInputStream 和 FileOutStream -->字节型文件流(1字节) 一.FileInputStream 1.包 java.io 2.了解一下继承关系 InputStream类 字节型输入流的父类 3.创建...
  • IO流FileInputStream和FileOutputStream 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 2.流的分类 流按流向分为两种:输入流,输出流。 流按操作类型...
  • FileWriter和FileOutputStream

    千次阅读 2012-10-31 18:58:20
    (1)FileWriter继承自OutputStreamWriter,在FileWriter中除了构造函数并没有其它的方法,在FileWriter的构造函数中,会先封装出一个OutputStream传递给父类OutputStreamWriter构造出父类的对象,调用FileWriter的...
  • FileOutputStream类和FileInputStream类,他们的父类分别是OutputStream类和InputStream类。 FileOutputStream类FileInputStream类都没有子类了。它们的父类都是抽象类不能实例化。 所以FileOutputStream类和...
  • Java 写文件:FileOutputStream  (2010-04-23 14:31:40) 转载▼ 标签:  java   输出流 分类: Java [声明]:本文为本博主 晓强(gulibia)原创。欢迎转载。联系方式:...
  • IO、四大父类、IO异常处理、properties 一、IO 1、IO概述 I:input输入(读取)【从硬盘到内存】 O:output输出(写入)【从内存到硬盘】 流:数据(字符、字节) 输入流 输出流 字节流 inputStream outputStream ...
  • 1、一个父类实现序列化,子类自动实现序列化; 示例: package com.jd.vo; import java.io.Serializable; public class Father implements Serializable{ private static final long serialVersionUID = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,246
精华内容 10,898
关键字:

fileoutputstream的父类