java学习笔记|输入输出流(一)

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();
}

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值