I/O字符流
以两个字节为基本输入输出单位,适合于处理文本类型数据。
-
两种基本流:1. 输入Reader
2. 输出writer
Reader字符输入是抽象类,不能被实例化,也是由它派生子类实例化。
-
输入流:
基本的地方法:1. read():读取单个字符并返回,如果返回值是-1,则表示文件结束。
2. readLine():读取一个文本行,如果返回值null,则表示文件结束。
(该方法不是所有字符输入流都有)
3. read(char cbur []):读字符输入流都有。
4. read(char cbuf[],int offset, int length) : 读取字符放入数组的指定位置。
其它方法:1. close();
2. long skip(long n) 跳过n个字符
3. mark(int) 标记当前流,并建立int大小缓冲区
4. reset(),返回标签处。
5. boolean ready()测试当前流是否进入读。
注意:字符流是以两节为基本输入为单位,所以用char数组。
package src;
import java.io.*;
public class TestFileReader1
{
public static void main(String[] args)
{
try
{
FileReader fin = new FileReader("data.dat");//创建文件输入流对象fin
int c;
//byte[] bsy=new byte [120];
while ((c=fin.read())!=-1)
{
System.out.print((char) c);
//System.out.println("");
}
fin.read();
// dSystem.out.println(new String(bsy));
// while((c=fin.read())!=-1)//读一个字符,如果不为-1,就没有达到文件末尾
// {
// System.out.print((char)c);
// count++;
// }
// System.out.println("共读取"+count+"个字符");
fin.close(); //关闭fin输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}
}
}
-----------------
package IOinputStream;
import java.io.*;
public class WriteInput
{
public static void main(String[] args)
{
try
{
FileReader fin=new FileReader("d:/A.txt"); //创建文件输入流对象fin
BufferedReader in=new BufferedReader(fin);//组合生成文件输入流对象in
String line;
while((line=in.readLine())!=null)//读一个文本行,如果不为行,就没有达到文件末尾
{
System.out.println(line);
}
in.close(); //关闭in输入流
fin.close();//关闭fin输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}
}
}
---------------------------
package src;
import java.io.*;
public class TestFileReader3
{
public static void main(String[] args)
{
try
{
FileReader fin = new FileReader("data.dat");//创建文件输入流对象fin
char cbuf[] = new char[128];//创建字符数组,长度128
int count; //记录实际读取字符数
count=fin.read(cbuf); //从文件输入流fin中读取字节数据到字符数组
//count=fin.read(cbuf,0,cbuf.length); //从文件输入流fin中读取字符数据到字符数组
System.out.println("共读取"+count+"个字符");
System.out.print(new String(cbuf));
fin.close(); //关闭fin输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}
}
}
基本的读法:1. writer(int ()) ; 写单个字符。
2. writer(char cbuf []) ; 写字符数组
3.
基本写法:1. close();
2. flush(); 强制写
注意:必须将字符串转换为字符数组。
package src;
import java.io.*;
public class TestFileWriter1
{
public static void main(String[] args)
{
try
{
FileWriter fout = new FileWriter("data.dat");//创建文件输出流对象fout
String str="more and more";
char cbuf[] = str.toCharArray();//将字符串str转化为字符数组
for (int i=0;i<cbuf.length;i++)
fout.write(cbuf[i]); //将字符数组逐个写入输出流fout
System.out.print("写入文件成功!");
fout.close(); //关闭fout输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}
}
}
-----------------------------------
package src;
import java.io.*;
public class TestFileWriter2
{
public static void main(String[] args)
{
try
{
FileWriter fout = new FileWriter("data.dat");//创建文件输出流对象fout
String str="more and more";
char cbuf[] = str.toCharArray();//将字符串str转化为字符数组
fout.write(cbuf); //将字符数组写入输出流fout
//fout.write(cbuf,0,cbuf.length); //将字符数组写入输出流fout
System.out.print("写入文件成功!");
fout.close(); //关闭fout输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}
}
}
----------------------------------
package src;
import java.io.*;
public class TestFileWriter3
{
public static void main(String[] args)
{
try
{
FileWriter fout = new FileWriter("data.dat");//创建文件输出流对象fout
String str="more and moreaaa";
fout.write(str); //将字符串str写入输出流fout
//fout.write(str,0,str.length()); //将字符串str写入输出流fout
System.out.print("写入文件成功!");
fout.close(); //关闭fout输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}
}
}
package src;
import java.io.*;
public class Test1
{
public static void main(String[] args) throws IOException
{
FileReader fin = new FileReader("indata.dat");//生成输入字符流对象fin
BufferedReader in = new BufferedReader(fin);//组合生成输入字符流对象in
String str=in.readLine();//读输入流对象中的一行文本。
while (str!=null)//未读完
{
System.out.println(str);//输出读取的行
str=in.readLine(); //再读一行。
}
in.close();
fin.close();
}
}
----------------------
package IOinputStream;
import java.io.*;
import java.util.Scanner;
public class WriteInput
{
public static void main(String[] args) throws IOException
{
//该程序功能为从键盘输入多行文本,以#号结束,将这些从键盘输入的文本逐行读取,存入到文件outdat.dat文件中
InputStreamReader fin = new InputStreamReader(System.in);//使用标准输入流System.in生成输入流对象fin,该对象可以从键盘读取输入的内容。
BufferedReader in = new BufferedReader(fin); //组合生成输入流对象in
//Scanner in=new Scanner(System.in);//用用户交互类更简洁
FileWriter fout = new FileWriter("outdata.dat");//生成输出流对象fout,该对象关联文件outdata.dat
BufferedWriter out = new BufferedWriter(fout); //组合生成输流对象out
System.out.println("input:");//提示从键盘输入
String str = in.readLine();//读一行给str
while(!(str.equals("#"))) //不是#
{
out.write(str); //将str写入到out,因为out关联outdata.dat,所以也就是写入outdata.dat
out.newLine(); //写入一个新行。
str = in.readLine();
}
in.close();
fin.close();
out.close();
fout.close();
}
}