Java中重要的输入/输出类
- File类
- InputStream类
- OutputStream类
- FilterStream类
- 增强的多字节类
文件或目录信息的处理—File类
public File(String pathname):它的用处是使用指定的路径,创建一个File对象。
public File(String parent, String
child):使用指定的路径和字符串创建一个File类。
public File(File parent, String child):使用一个File类的对象parent与字符串创建一个新的File对象。通过以上的构造器来构造File对象。然后,使用这个类提供的方法函数和属性值,进行文件和目录的操作。
File类常用的方法函数
public boolean canread() | 测试该文件是否可读 |
---|---|
public boolean canwrite() | 测试该文件是否可写 |
public boolean createNewFile() | 测试该文件目录是否存在 |
public static File createTempFile(String prefix,String suffix) | 在临时目录中,创建以prefix为文件名,suffix为扩展名的临时文件 |
public static File createTempFile(String prefix,String suffix,File directory) | 在目录directory中创建以prefix为文件名,suffix为扩展名的临时文件 |
pubilic boolean delete() | 删除当前对象所指文件,删除成功返回true,否则返回false |
public void deleteOnExit() | JVM(虚拟机)终止时。删除当前对象所指定的文件 |
public boolean exists() | 测试当先对象所指文件是否存在,若存在返回true,若不存在返回false |
public String getName() | 获取文件或目录的名称(不包含路径) |
public String getParent() | 获取文件所在的目录名称 |
public String getPath() | 获取文件或目录名称 |
public boolean isDirectory() | 测试当前对象是否为目录,若当前对象为目录,则返回true,否则返回false |
public boolean isFile() | 测试当先对象是否为文件,若是文件返回true,否则返回false |
public boolean isHidden() | 测试当前对象所代表的文件是否为隐藏文件,若是返回true,否则返回false |
public long lastModified() | 返回文件最后的修改日期,以long型表示 |
public long length() | 返回文件的的大小 |
public String[ ] list() | 若对象代表的是目录,则将此目录下的文件名存储在String数组中,并返回;若当前对象不是目录,则返回null |
public File[ ] listFiles() | 若对象代表目录,则将此目录中所有文件转换成File对象,再返回File数组中,否则返回null |
public boolean mkdir() | 在当前对象指定的路径上创建一个目录 |
public boolean renameTo(File dest) | 将当前所指定的文件名改为dest |
public boolean setReadOnly() | 将当前文件设为只读 |
文件处理方法的应用
01 import java.io.*;
02 ///创建一个文件类
03 ///通过getName、getParent、getPath来获取文件路径和文件名等信息
04 public class file
05 {
06 public static void main(String[]args)
07 {
08 File f=new File("d:\\","file.txt");
09 System.out.println(f.getName());
10 System.out.println(f.getParent());
11 System.out.println(f.getPath());
12 }
13 }
运行效果
file.txt
d:\
d:\file.txt
文件和目录的完全处理
01 import java.io.*;
02 ///通过print方法来判断这个文件类对象的性质
03 ///通过print1方法来获取文件对象的信息
04 ///通过print2方法来获取文件对象的信息
05 public class file1
06 {
07 public void print(File f)
08 {
09 if(f.isDirectory())
10 {
11 System.out.println("这是一个目录!");
12 }
13 else
14 {
15 System.out.println("这不是一个目录!");
16 }
17 if(f.exists())
18 {
19 System.out.println("这个文件是存在的!");
20 }
21 else
22 {
23 System.out.println("抱歉,这个文件是不存在的!");
24 try
25 {
26 f.createNewFile();
27 }
28 catch(Exception e){}
29 }
30 }
31 public void print1(File f)
32 {
33 System.out.println(f.getName());
34 System.out.println(f.getParent());
35 System.out.println(f.getPath());
36 }
37 public void print2(File f)
38 {
39 if(f.isFile())
40 {
41 System.out.println(f.lastModified());
42 System.out.println(f.length());
43 }
44 }
45 public static void main(String[]args)
46 {
47 file1 f1=new file1();
48 File f=new File("d:\\filetest","file.txt");
49 f1.print(f);
50 f1.print1(f);
51 f1.print2(f);
52 }
53 }
运行效果
这不是一个目录!
这个文件是存在的!
file.txt
d:\filetest
d:\filetest\file.txt
1251538022515 211
流——stream
流就是数据流向某个对象,并且到达这个对象的过程。
输入流
输入流就是从目标程序中,将数据以流的形式复制到前面说的流对象中,然后,再从流对象中将数据读取出来。
输出流
输出流就是将数据以流的形式复制到流对象中去,再从这些流对象中取出流,写入到目标中。
字节输入流——InputStream
int read() | 自输入流读取数据并返回0~255之间的一个int整数。若文件读完了或再无可读数据,则返回-1 |
---|---|
int read(byte b[ ]) | 从输入流中读取数据并存入字节数组b中。它的返回值是所读取的byte数,若无可读数据则返回-1 |
int read(byte []b, int off,int len) | 从输入流中读取len个字节的数据,并存入字节数组b中。它的返回值是所读取的byte数,若无可读数据,则返回-1 |
void close | 关闭输入流,并且释放与输入流相关的系统资源 |
字节输出流——OutputStream
int write(int b) | 将b转换成字节,然后写到输出流中,每次写一个字节 |
---|---|
int write(byte b[]) | 将字节数组中的数据写到输出流中 |
int write(byte b[],int off,int len) | 将字节数组中从第off位置开始长度为len个字节的数据写到输出流中 |
void close() | 关闭输出流,并且释放与输出流相关的系统资源 |
文件字节输入流——FileInputStream
public FileInputStream(String name) | 创建一个FileInputStream对象,从以name为名称的文件名称中读取数据。 |
---|---|
public FileInputStream(File file) | 创建一个FileInputStream对象。从指定的对象file中读取数据。 |
01 import java.io.*;
02 ///创建一个文件类f
03 ///创建一个输入流对象fis,并且以f作为参数
04 ///使用循环语句将文本文件中的字符读出
05 public class file3
06 {
07 public static void main(String[]args)throws Exception
08 {
09 File f=new File("d:\\filetest\\file.txt");
10 FileInputStream fis=new FileInputStream(f);
11 char ch;
12 for(int i=0;i<f.length();i++)
13 {
14 ch=(char)fis.read();
15 System.out.print(ch);
16 }
17 fis.close();
18 }
19 }
运行效果
addbcnhhvbvbbvnbvncxzxvdfhhtrrgregf
注:读者机器上如果没有file.txt文件,则会报错。先手动创建此文件,文件内容与上述结果相同。
用文件字节输出流——FileOutputStream
public fileOutputStream(String name) | 按照指定字符串创建的目标,创建一个输出流对象,若文件不存在则创建它,若文件存在则覆盖它 |
---|---|
public fileOutputStream(File file) | 使用指定的文件对象创建输出流对象 |
public fileOutputStream(String name,boolean append) | 按照指定字符串创建目标,创建一个输出流对象,若文件存在且append为真,新写入的数据将追加在原数据之后,append若为假,新数据会覆盖原来的数据 |
pubilic FileOutputStream(File file,boolean append() | 使用指定的文件对象创建输出流对象,若文件存在且append()为真,新写入的数据将追加在原数据之后 |
01 import java.io.*;
02 ///创建一个文件类对象f
03 ///创建一个文件输出流对象fos
04 ///使用循环语句往f中写入数据
05 public class file5
06 {
07 public static void main(String[]args)throws Exception
08 {
09 File f=new File("d:\\filetest\\file.txt");
10 FileOutputStream fos=new FileOutputStream(f);
11 for(int i=’a’;i<=’z’;i++)
12 {
13 fos.write(i);
14 }
15 fos.close();
16 }
17 }
运行效果
没有运行结果,但在file.txt中发现了刚才程序自动输入的数据,是26个小写的英文字母。
多字节数据读取类—Filter类
Filter类是一个非常有用的类,它能够进行多字节数据的读取。如果使用了Filter类,则可以方便地处理那些除字节数据类型以外的数据,Filter流对象被分为“FilterInputStream”和“FilterOutputStream”两个流类。
FilterInputStream
数据的数据类型可以是字节、字符、整型、浮点型等。先通过“FileInputstream”类读取数据,然后通过“FilterInputStream”类对数据进行组合,最后再输出数据。
01 import java.io.*;
02 ///创建一个文件类对象f
03 ///创建一个文件输入流对象fis,并且以f作为参数
04 ///创建一个过滤输入流对象filter,并且以fis作为参数
05 ///通过循环语句将f中的数据读出并且输出
06 public class file7
07 {
08 public static void
main(String[]args)throws Exception
09 {
10 File f=new File("d:\\filetest\\1.txt");
11 FileInputStream fis=new FileInputStream(f);
12 FilterInputStream filter=new FilterInputStream(fis);
13 for(int i=0;i<f.length();i++)
14 {
15
System.out.print(filter.read(i));
16 }
17 fis.close();
18 }
19 }
FilterOutputStream
数据的数据类型可以是字节、字符、整型、浮点型等。先通过“FilterOutputStream”类,将所有这些类型的数据分解成字节类型的数据,再将字节类型的数据通过“FileOutputStream”类向目标对象输出数据。
01 import java.io.*;
02 ///创建一个文件类对象f
03 ///创建一个文件输出流对象fos,并且以f作为参数
04 ///创建一个过滤输出流对象filter,并且以fos作为参数
05 ///通过循环语句往f中写入数据
06 public class file8
07 {
08 public static void main(String[]args)throws Exception
09 {
10 File f=new File("d:\\filetest\\1.txt");
11 FileOutputStream fos=new FileOutputStream(f);
12 FilterOutputStream filter=new FilterOutputStream(fos);
13 for(int i=’a’;i<’z’;i++)
14 {
15 filter.write(i);
16 }
17 fos.close();
18 }
19 }
增强的多字节输出流——DataOutput
DataOutputStream类的常用方法如下
所示:
boolean writeBoolean(boolean v);
byte writeByte(int v);
charwriteChar(int v);
shortwriteShort(int v);
int writeInt(int v);
long writeLong(long v);
floatwriteFloat(float v);
double writeDouble(double v);
String writeUTF(String str);
增强的多字节输入流——DataInput
boolean readBoolean();
byte readByte();
char readChar();
short readShort();
int readInt();
long readLong();
float readFloat();
double readDouble();
String readUTF();