[置顶] Java IO之FileInputStream&FileOutputStream
2017-09-18 15:49
363 查看
InputStream和OutputStream之间的对应关系
InputStream与OutputStream及其子类间具有很强的对称性。下图很形象地展现出它们之间的对应关系,只有PrintStream是没有对应的。1.FileInputStream 和 FileOutputStream
java.io.FileInputStream类从文件系统中的一个文件中获取字节。那些文件依赖于主机环境:- 这个类是指对原始字节诸如图像数据读出流。
- 对于字符读取流则使用FileReader。
Java.io.FileOutputStream 类是用于将数据写入一个文件或FileDescriptor的输出流。以下是关于文件输出流的要点:
- 这个类是指用于记录的原始字节,例如图像数据流。
- 写字符流,可以使用文件字符 FileWriter
1.1.类声明
FileInputStreampublic class FileInputStream extends InputStream
FileOutputStream
public class FileOutputStream extends OutputStream
1.2.构造函数
FileInputStreamSN# | 构造函数 | 描述 |
---|---|---|
1 | FileInputStream(File file) | 通过打开文件系统中的File对象创建一个FileInputStream |
2 | FileInputStream(FileDescriptor fd) | 使用文件描述符,在文件系统中某个实际文件的现在连接创建一个FileInputStream |
3 | FileInputStream(String name) | 通过路径名创建一个FileInputStream到实际文件的一个连接 |
SN# | 构造函数 | 描述 |
---|---|---|
1 | FileOutputStream(File file) | 创建一个文件输出流写入到指定的File对象 |
4 | FileOutputStream(File file, boolean append) | 创建文件输出流写入到指定的File对象表示的文件 |
2 | FileOutputStream(FileDescriptor fd) | 这将创建一个输出文件流写入到指定的文件描述符,它代表了文件系统中的某个实际文件的现有连接 |
3 | FileOutputStream(String name) | 这将创建一个输出文件流写入到具有指定名称的文件 |
3 | FileOutputStream(String name,boolean append) | 这将创建一个输出文件流写入到具有指定名称的文件 |
1.3.方法
FileInputStream- int available(): 此方法从输入流中通过一个方法的下一次调用阻塞该输入流返回可以读取(或跳过)的剩余字节数的估计值;
- void close(): 此方法关闭此文件输入流并释放与该流关联的所有系统资源;
- protected void finalize(): 此方法可确保此文件输入流的close方法被调用当它没有更多的参考引用;
- FileChannel getChannel(): 此方法返回与此文件输入流关联的唯一文件通道对象;
- FileDescriptor getFD(): 此方法返回FileDescriptor对象,表示连接到正在使用此文件输入流文件系统的实际文件;
- int read(): 该方法返回数据的下一个字节,或如果到达文件的结尾则为-1;
- int read(byte[] b): 该方法将返回读入缓冲区的总字节数,或如果没有更多的数据被读取则返回-1。
- int read(byte[] b, int off, int len): 此方法读取最多len个从这个输入流中数据的字节到字节数组;
- long skip(long n): 此方法跳过并丢弃n个字节从输入流中的数据;
FileOutputStream
- void close(): 此方法关闭此文件输出流并释放与此流有关的所有系统资源;
- protected void finalize(): 这种方法清除连接到文件,并确保此文件输出流的close方法被调用时,此流不再有引用;
- FileChannel getChannel(): 此方法返回与此文件输出流关联的唯一文件通道对象;
- FileDescriptor getFD(): 此方法返回与此流有关的文件描述符;
- void write(byte[] b): 此方法写入b.length个字节从指定的字节数组到该文件输出流;
- void write(byte[] b, int off, int len): 此方法从指定的字节数组开始到该文件输出流关闭写入len字节;
- void write(int b): 此方法写入指定的字节写入此文件输出流;
1.4.实例
FileInputStreamimport org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; import java.nio.channels.FileChannel; /** * Created by david.tian on 18/09/2017. */ public class FileInputStreamDemo { public static Logger LOG = LoggerFactory.getLogger(FileInputStreamDemo.class); public static void main(String[] args) throws IOException{ FileInputStream fis = null; int available = 0; int i =0; FileChannel fc = null; long pos; char cc; FileDescriptor fd = null; boolean bl = false; byte[] bt = new byte[10]; int j=0; char aa; try{ //create new file input stream fis = new FileInputStream("/Users/david.tian/Documents/Kudu/database/kudu"); fd = fis.getFD(); //get the file descriptor bl = fd.valid(); // test fi the file is valid or invalid. //prints System.out.println("Valid File: "+ bl); //read bytes to the buffer j = fis.read(bt); System.out.print("Number of bytes read: "+ i); System.out.println(" Bytes read: "); //for each byte in buffer for(byte b: bt){ //converts byte to character aa = (char)b; //print System.out.println("aa: =====>"+aa); } //read till the end of the stream while((i=fis.read())!=-1){ //available bytes available = fis.available(); //get the file channel fc = fis.getChannel(); pos = fc.position(); //get channel position //convert integer to character char c = (char)i; //prints System.out.print("Available: ===========>"+available); System.out.println("; Read: "+c); System.out.print("NUM of bytes read:======> "+pos); System.out.println("; Char read: "+c); } } catch (Exception e){ e.printStackTrace(); } finally { if(fis!=null){ fis.close(); } if(fc!=null){ fc.close(); } } } }
输出: 假如文件/Users/david.tian/Documents/Kudu/database/kudu中含有数据:ABCDEFGHIJKLMNOPQRSTUVWXYZ
Valid File: true Number of bytes read: 0 Bytes read: aa: =====>A aa: =====>B aa: =====>C aa: =====>D aa: =====>E aa: =====>F aa: =====>G aa: =====>H aa: =====>I aa: =====>J Available: ===========>15; Read: K NUM of bytes read:======> 11; Char read: K Available: ===========>14; Read: L NUM of bytes read:======> 12; Char read: L Available: ===========>13; Read: M NUM of bytes read:======> 13; Char read: M Available: ===========>12; Read: N NUM of bytes read:======> 14; Char read: N Available: ===========>11; Read: O NUM of bytes read:======> 15; Char read: O Available: ===========>10; Read: P NUM of bytes read:======> 16; Char read: P Available: ===========>9; Read: Q NUM of bytes read:======> 17; Char read: Q Available: ===========>8; Read: R NUM of bytes read:======> 18; Char read: R Available: ===========>7; Read: S NUM of bytes read:======> 19; Char read: S Available: ===========>6; Read: T NUM of bytes read:======> 20; Char read: T Available: ===========>5; Read: U NUM of bytes read:======> 21; Char read: U Available: ===========>4; Read: V NUM of bytes read:======> 22; Char read: V Available: ===========>3; Read: W NUM of bytes read:======> 23; Char read: W Available: ===========>2; Read: X NUM of bytes read:======> 24; Char read: X Available: ===========>1; Read: Y NUM of bytes read:======> 25; Char read: Y Available: ===========>0; Read: Z NUM of bytes read:======> 26; Char read: Z
FileOutputStream
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; /** * Created by david.tian on 18/09/2017. */ public class FileOutputStreamDemo { public static Logger LOG = LoggerFactory.getLogger(FileInputStreamDemo.class); public static void main(String[] args) throws IOException{ FileOutputStream fos = null; FileChannel fc = null; FileDescriptor fd = null; long pos; byte b[] ={65,66,67,68,69,70,71,72,73,74,75,76}; try{ //create new file output stream fos = new FileOutputStream("/Users/david.tian/Documents/Kudu/database/mysql"); //write buffer to the output stream fos.write(b); //pushes stream to the file fos.flush(); //returns file channel associated with this stream fc = fos.getChannel(); //get file descriptor instance fd = fos.getFD(); boolean bl = fd.valid(); //returns the number of bytes written pos = fc.position(); //prints System.out.println("position==============>"+fc.position()); System.out.println("Is file valid?==============>"+bl); } catch(Exception e){ e.printStackTrace(); } finally{ if(fos!=null){ fos.close(); } if(fc!=null){ fc.close(); } } } }
输出:假设/Users/david.tian/Documents/Kudu/database/mysql为空,运行以后:
position==============>12 Is file valid?==============>true 文件中也写入了相应的内容: ABCDEFGHIJKL
相关文章推荐
- 【Java.IO】I/O 字节 <-> 字符转换流 —— InputStreamReader,OutputStreamWriter(FileReader,FileWriter)
- Java IO - FileInputStream&FileOutputStream
- Java IO 之 FileInputStream & FileOutputStream源码分析
- JAVA IO之BufferedInputStream&BufferedOutputStream
- java.io.IOException - Cannot run program "git": java.io.IOException: error=2, No such file or direct
- java.io.FileNotFoundException: Template /template/SEL00/token.ftl not found. <s:token>出错
- Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack问题解决
- Java IO - InputStream&OutputStream
- Java IO(八):PipedInputStream & PipedOutputStream
- Java IO - FileReader&FileWriter
- Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack问题解决
- java.io.FileNotFoundException:&n…
- HttpURLConnection.getInputStream java.io.FileNotFoundException
- [Storm 0.8.2]: java.io.FileNotFoundException: File '../stormconf.ser' does not exist
- hadoop MR 任务 报错 "Error: java.io.IOException: Premature EOF from inputStream at org.apache.hadoop.io"
- java.io.fileinputstream cannot be cast to java.io.file
- Java IO之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别
- struts2下载文件时严重: Can not find a java.io.InputStream with the name [targetFile] in the invocation
- 【struts2文件下载】Can not find a java.io.InputStream with the name [downloadFile]...
- new FileOutputStream("a.bmp") 报错java.io.FileNotFoundException: /a.bmp (Read-only file system)