File类
File类在java.io中,主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度等,不能对文件的内容进行读写
构造方法:
Public File(String name)
File file1=new File("D:\\enjoy\\data1.txt"); File file2=new File("data\\data2.txt"); File file3=new File("data");
Public File(String parent,String child)
File file4=new File("D:\\enjoy", "data"); File file5=new File("D:\\enjoy", "data4.txt");
Public File(File parent, String child)
File file6=new File("D:\\enjoy"); File file7=new File(file6, "data.txt");
成员方法:
//文件名或目录名信息获取:
public String getName();
public String getParent();
public String getPath();
public String getAbsolutePath()
//文件性质信息获取:
public boolean isAbsolute();
public boolean canRead();
public boolean canWrite();
public boolean exists();
public boolean isDirectory();
public boolean isFile();
//文件内容有关信息获取:
public long length();//获取本File对象对应的内容的大小
public long lastModified();//获取本File对象对应的内容最后一次修改的时间(用Java给出的毫秒计时法表示)
//文件和目录操作:
public boolean renameTo(File dest);//更该对应文件的名称
public boolean createNewFile() throws IOException;//创建本File对象对应的文件
public boolean delete();//删除本File对象对应的文件
public boolean mkdir();//创建本File对象对应的目录
File类不能实现对文件的读写操作,这时需要用到文件流:文件字节流和文件字符流
文件——>内存:文件输入流
内存——>文件:文件输出流
文件字节流
文件字节输入流 (FileInputStream类,显然是InputStream类的子类)
**注意!**不允许文件不存在,且文件内容不能为空
构造方法:
FileInputStream in = new FileInputStream(String name);
FileInputStream in = new FileInputStream(File);
例如:
FileInputStream in = new FileInputStream("a.txt");
或者
File f = new File("lianxi1.txt");
FileInputStream in = new FileInputStream(f);
读方法:
FileInputStream类的对象调用read()方法顺序地读取文件,直到文件的末尾或者流被关闭, read()方法如下所示
public int read() throws IOException;//一次读取一个字节,将其转换为该字符在Unicode表的位置,并返回,但汉字不适用,汉字占两个字节,此方法会将一个汉字分开,字符流则不存在这种情况
public int read(byte[ ] b) throws IOException;//一次读取b的长度,b事先已确定,返回的是数组的长度
public int read(byte[ ] b, int off, int len) throws IOException;//返回数组的长度
读取位置达到文件末尾,则返回-1
文件字节输出流(FileOutputStream类)
允许文件不存在,不存在时会自动创建
构造方法:
FileOutputStream out = new FileOutputStream(String name);
或
FileOutputStream out = new FileOutputStream(File);
注意:构造方法只有一个参数时,默认为false,新写入的内容会覆盖掉原来的内容,要想在原来的基础上继续写入,需要使用new FileOutputStream(File,true)
写方法:
FileOutputStream类的对象调用write()方法顺序地向文件写入内容,直到流被关闭,输入之初如果文件已经存在,则内容将被刷新;如果文件不存在,则文件将被创建,write()方法如下所示
public void write(byte[ ] b) throws IOException;
public void write(byte[ ] b, int off, int len) throws IOException;
文件字符流
文件字符输入流(FileReader类)
构造方法与字节输入流类似
FileReader类的对象调用read()方法顺序地读取文件,直到文件的末尾或者流被关闭, read()方法如下所示
public int read() throws IOException;
public int read(char[ ] cbuf) throws IOException;
public int read(char[ ] cbuf, int off, int len) throws IOException;
读取位置达到文件末尾,则返回-1
文件字符输出流(FileWriter类)
构造方法与字节输出流类似
FileWriter类的对象调用write()方法顺序地把字符数据写入文件,write()方法如下所示
public void write(int c) throws IOException;//写一个字符
public void write(char[ ] cbuf) throws IOException;//写cbuf.length个字符
public void write(char[ ] cbuf, int off, int len) throws IOException;//写数组片段
public void write(String str) throws IOException;//写全部的字符串,较为常用
public void write(String str, int off, int len) throws IOException;//写字符串片段
结合字符缓冲流实现读取一行内容
文件——>文件输入流——>缓冲输出流——>内存
内存——>缓冲输出流——>文件输出流——>文件,在这里文件输出流完全可以实现换行,所以输出没必要通过缓冲流
字符缓冲流
字符缓冲输入流BufferedReader类:
构造方法:
public BufferedReader(Reader in); //参数可以是Reader类也可以是Reader类的子类,如FileReader类
BufferedReader类读取一行数据的方法:
public String readLine() throws IOException;
实例:
编写一个Java源程序,其中包含:
编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:
(1)从键盘上输入两个文件的路径名及其文件名。
(2)从键盘上输入若干学生的信息(姓名,数学成绩,计算机成绩,各项之间用空格隔开),以finish结束,将这些学生的信息写入第一个文件。
(3)将第一个文件作为输入流的源,找出姓“张”的学生,将他们的信息写入第二个文件。
import java.util.*;
import java.io.*;
public class IO {
public static void main(String[] args) {
System.out.println("请输入两个文件的路径及其文件名:");
Scanner reader=new Scanner(System.in);
String s1,s2;
s1=reader.next();
s2=reader.next();
System.out.println("请输入学生的信息,各部分用空格隔开,以finish结束:");
String s;
s=reader.nextLine();
s=reader.nextLine();
try {
FileWriter f1=new FileWriter(s1);
while(!s.equals("finish"))
{
f1.write(s);
f1.write((int)'\r');
f1.write((int)'\n');
s=reader.nextLine();
}
f1.close();
FileReader f2=new FileReader(s1);
BufferedReader f3=new BufferedReader(f2);
FileWriter f4=new FileWriter(s2);
String ss=null;
while((ss=f3.readLine())!=null) {
if(ss.charAt(2)=='张')
{
f4.write(ss);
f4.write((int)'\r');
f4.write((int)'\n');
}
}
f4.close();
f3.close();
f2.close();
}catch(IOException ioe){
System.out.println("文件输入输出错误!");
}
reader.close();
}
}