------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
黑马程序员java I/O系统1
File类的对象,表示了磁盘上的文件或目录,提供了与平台无关的方法来对磁盘上的文件或目录操作。File类描述了文件本身的属性,用来获取或处理磁盘文件相关的信息,例如权限,时间,日期和目录路径。File类还可以浏览子目录层次结构。目录管理的主要方法为:mkdir()根据抽象路径名创建目录;list()返回抽象路径名表示路径中的文件名和目录名。File类定义了一些常用方法,例如createNewFile()在指定位置创建文件,如果该文件已经存在,则不创建,返回false,getName()返回文件名,isDirectory()判断是否是目录,exists()在文件存在的情况下返回true,反之返回false,length()返回由此抽象路径名表示的文件的长度,delete()删除此抽象路径名表示的文件或目录,等等。使用FilenameFilter能够限制由list()方法返回的文件数目,使它返回那些与一定的文件名方式或者过滤相匹配的文件。
import java.io.File;
import java.io.IOException;
publicclass FileTest1 {
publicstaticvoid main(String[] args)
{
File file = new File("c:\\abc.txt");
File file2 = new File("c:/abc", "xyz/hello.txt");
try
{
System.out.println(file.createNewFile());
System.out.println(file2.createNewFile());
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
File file3 = new File("c:/abc/xyz/hello");
System.out.println(file.mkdirs());
System.out.println(file.isFile());
File[] files = file3.listFiles();
for(File f : files)
{
System.out.println(f.getName());
System.out.println(f.getParent());
}
}
}
在java.io包中提供了大量的类(流)。从功能上分为两大类:输入流和输出流。从流结构上分为字节流和字符流。字节流的输入流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现。字符流输入输入输出的基础是抽象类Reader和Writer。但在最底层,所有的输入/输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。
读数据的逻辑是:
1. 打开一个流
2. 循环如果还有更多数据
3. 读取数据
4. 关闭这个流
写数据的逻辑是:
1. 打开一个流
2. 循环如果还有更多数据
3. 写入数据
4. 关闭这个流
抽象类InputStream和OutputStream定义了实现其他流类的关键方法。最重要的两个方法时read()和write(),它们分别对数据的字节进行读写。InputStream类子类对象自然也继承了InputStream类的方法。常用的方法有:读数据的方法read(),获取输入流字节数的方法available(),定位输入位置指针的方法skip(),reset(),mark()等。OutputStream类子类对象也继承了OutputStream类的方法。常用的方法有:写数据的方法write(),关闭流方法close(),刷新输出流方法flush()等。
过滤流的主要特点是在输入输出数据的同时能对所传输的数据做指定类型或格式的转换,即可实现对二进制字节数据的理解和编码转换,并且提供了同步机制。类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类。过滤流需要使用已经存在的节点流来构造。
Java提供了一系列的读写文件的类和方法。两个最常用的流类是FileInputStream和FileOutputStream,它们生成与文件链接的字节流。为打开文件,你只需创建这些类中某一个类的一个对象,在构造方法中以参数形式指定文件的名称。当你对文件的操作结束后,要调用close()来关闭流。FileInputStream类创建一个能从文件读取字节的InputStream类。读取文件使用read()方法,它从文件中读取一个字节并将该字节以整数形式返回。当读到文件尾时,返回-1。FileOutputStream创建了一个可以向文件写入字节的类OutputStream,它的创建不依赖于文件是否存在。在创建对象时FileOutputStream在打开输出文件之前创建它。向文件写数据,需用write(int b)方法,但仅低8位字节可以写入文件。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
publicclass Test4 {
publicstaticvoid main(String[] args) throws IOException
{
readFile_1();
readFile_2();
writeFile();
}
publicstaticvoid readFile_1()throws IOException
{
FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = newbyte[1024];
int len = 0;
while((len=fis.read(buf))!=-1)
{
System.out.println(new String(buf,0,len));
}
fis.close();
}
publicstaticvoid readFile_2()throws IOException
{
FileInputStream fis = new FileInputStream("fos.txt");
int ch = 0;
while((ch=fis.read())!=-1)
{
System.out.println((char)ch);
}
fis.close();
}
publicstaticvoid writeFile()throws IOException
{
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("abcde".getBytes());
fos.close();
}
}
ByteArrayInputStream是把字节数组当成源的输入流。该类有两个构造方法,每个构造方法需要一个字节数组提供数据源:ByteArrayInputStream(byte array[])和ByteArrayInputStream(byte array[],int start,int numBytes)。第二个构造方法创建了一个InputStream类,该类从字节数组的子集生成,以start指定索引的字符为起点,长度由numBytes决定。
package com.heima.exam;
import java.io.ByteArrayInputStream;
publicclass ByteArrayInputStreamTest
{
publicstaticvoid main(String[] args)
{
String temp = "abc";
byte[] b = temp.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(b);
for(int i = 0; i < 2; i++)
{
int c;
while(-1 != (c = in.read()))
{
if(0 == i)
{
System.out.println((char)c);
}
else
{
System.out.println(Character.toUpperCase((char)c));
}
}
System.out.println();
in.reset();
}
}
}
ByteArrayOutputStream是一个把字节数组当作输出流的实现。它有两个构造方法:ByteArrayOutputStream()和ByteArrayOutputStream(int numBytes)。在第一种形式中,一个32位字节的缓冲区被生成。第二个构造方法生成一个numByets大小的缓冲区。因为这两个流对象都操作的数组,并没有使用系统资源。所以,不用进行close关闭。
package com.heima.exam;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
publicclass ByteArrayOutputStreamTest
{
publicstaticvoid main(String[] args) throws Exception
{
ByteArrayOutputStream f = new ByteArrayOutputStream();
String str = "hello world welcome";
byte[] buffer = str.getBytes();
f.write(buffer);
byte[] result = f.toByteArray();
for(int i = 0; i < result.length; i++)
{
System.out.println((char)result[i]);
}
OutputStream os = new FileOutputStream("d:\\test.txt");
f.writeTo(os);
f.close();
os.close();
}
}