java_io

Java IO

I-就是从硬盘到内存

O-就是从内存到硬盘

操作IO需要有异常信息处理

File对象

       File的API可以直接访问底层文件系统。以下为基本用法

实例化一个File对象,可以是一个文件也可以是一个目录

File file = new File(filePath);

File file = new File(fileDir, fileName);

检测文件是否存在

boolean fileExist = file.exists();

文件长度

long length = file.length();

重命名或移动文件

boolean success = file.renameTo(newFile(anotherPath));

删除文件

boolean success = file.delete();

检测文件是否为目录

boolean isDirectory = file.isDirectory();

读取文件中的文件列表

File[] files = file.listFiles();

String[] files = file.list();

文件分隔符

File.separator

字节流

字节输入流 InputStream

InputStream是最基本的输入流,读取基于字节的数据,一次读取一个字节。

InputStream is = new FileInputStream(file);

is.read();//读取一个字节

is.read(bytes);//读取一定量的字节,存储在缓冲区byte数组中

is.read(bytes, off, len);

is.available();//字节数

is.close();

字节输出流OutputStream

OutputStream os = newFileOutputStream(file);

os.write(bytes);

os.write(bytes, off, len);

os.write(byte);

os.flush();//刷新输出流并强制写出所有缓冲的输出字节

os.close();

输入转换流

InputStreamReader是字节输入流转换成字符输入流的桥梁。

InputStreamReader isr = newInputStreamReader(is);

常用构造方法

InputStreamReader(InputStream in)

创建一个使用默认字符集的InputStreamReader。

InputStreamReader(InputStream in, Charsetcs)

创建使用给定字符集的InputStreamReader。

InputStreamReader(InputStream in,CharsetDecoder dec)

创建使用给定字符集解码器的InputStreamReader。

InputStreamReader(InputStream in, StringcharsetName)

创建使用指定字符集的InputStreamReader。

输出转换流

OutputStreamWriter 是字节输出流转换成字符输出流的桥梁。

OutputStreamWriter osr = newOutStreamputWriter(os);

常用构造方法

OutputStreamWriter(OutputStream out)

创建使用默认字符编码的OutputStreamWriter。

OutputStreamWriter(OutputStream out, Charsetcs)

创建使用给定字符集的OutputStreamWriter。

OutputStreamWriter(OutputStream out,CharsetEncoder enc)

创建使用给定字符集编码器的OutputStreamWriter。

OutputStreamWriter(OutputStream out, StringcharsetName)

创建使用指定字符集的OutputStreamWriter。

字符流

字符输入流BufferedReader

BufferedReader能为字符输入流提供缓冲区,可以提高许多IO处理的速度。可以一次读取一大块的数据,而不需要每次从网络或者磁盘中一次读取一个字节。特别是在访问大量磁盘数据时,缓冲通常会让IO快上许多。

BufferedReader br = newBufferedReader(isr);

String lineString = br.readLine();

br.flush();

br.close();

字符输出流BufferedWriter

BufferedWriter可以为输出流提供缓冲区。可以构造一个使用默认大小缓冲区。

BufferWriter bw = new BufferWriter(osr);

bw.write(string);

bw.close()

文件流操作

文件Read

字节流读取文件

FileInputStream fis = new FileInputStream(file);

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

 

字符流读取文件

BufferReader br = new BufferedReader(newInputStreamRreader(fis));

String line = “”;

while((line = br.readLine()) != null){

}

br.flush();

br.close();

文件Write

字节流写文件

FileOutputStream fos = newFileOutputStream(file);//覆盖文件的内容

FileOutputStream fos = newFileoutputStream(file, true);//拼接到文件内容后面

fos.write(buffer);

fos.close();

 

字符流写文件

BufferedWriter bw=new BufferedWriter(newOutputStreamWriter(fos));

bw.write(string);

bw.close();

文件压缩、解压

压缩

FileInputStream fis = newFileInputStream(file);

String zipPath =file.getAbsolutePath().substring(0,file.getAbsolutePath().lastIndexOf("."))

            + ".zip";

ZipOutputStream zos = newZipOutputStream(new FileOutputStream(zipPath));

zos.putNextEntry(newZipEntry(file.getName()));

int len = 0;

byte[] buff = newbyte[10240];

while ((len = fis.read(buff)) != -1) {

   zos.write(buff, 0, len);

   zos.flush();

}

zos.finish();

zos.close();

fis.close();

 

解压

String filePath =file.getAbsolutePath().substring(0,

            file.getAbsolutePath().lastIndexOf("."));

ZipInputStream zis = new ZipInputStream(newFileInputStream(file));

ZipEntry zipEntry = null;

while ((zipEntry = zis.getNextEntry()) !=null) {

   if (!zipEntry.isDirectory()) {

     File f = new File(filePath + "\\" + zipEntry.getName());

     f.getParentFile().mkdirs();

     FileOutputStream fos = new FileOutputStream(f);

     int len = 0;

     byte[] buff = newbyte[10240];

     while ((len = zis.read(buff, 0, len)) != 0) {

         fos.write(buff, 0, len);

         fos.flush();

     }

            fos.close();

         }

      }

       zis.closeEntry();

      zis.close();

RandomAccessFile

允许来回读写文件,也可以替换文件中的某些部分。

RandomAccessFile file = newRandomAccessFile(filePah, “rw”);

第二个参数”rw”表示以读写的方式打开文件。

在RandomAccessFile的某个位置读写之前,必须把文件指针指向改位置,通过seek()

File.seek(200);

long pointer = file.getFilePointer();

 

int aByte = file.read();

read()方法返回当前RandomAccessFile实例的文件指针指向的位置中包含的字节内容。read()方法在读取完一个字节之后,会自动把指针移动到下一个可读字节。这意味着使用者在调用完read()方法之后不需要手动移动文件指针

 

file.write("Hello World".getBytes());

与read()方法类似,write()方法在调用结束之后自动移动文件指针,所以你不需要频繁地把指针移动到下一个将要写入数据的位置。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。