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异常");
}

}

}
 
  • 输出字符流writer:

    

             基本的读法:1. writer(int ()) ; 写单个字符。

                                   2. writer(char cbuf []) ; 写字符数组

                                   3. writer(String str);

                 基本写法: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();
  }
}

posted @ 2022-07-29 17:17  zjw_rp  阅读(48)  评论(0编辑  收藏  举报