File FileReader InputStream BufferedStream Scanner

InputStream不可以读取文件,它是一个Abstract的类,根本不可能实例化,是所有输入流的基类。而FileInputStreamInputStream的一个实现类,用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用FileReader 。FileWriter和FileReader是以字符为操作单位的文件输出流和输入流。(其父类分别为各自的后缀名即Writer和Reader类)。BufferedReader是字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取!速度要比Scanner快!而且也可以设置缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

在创建Scanner类的对象时,需要用System.in作为它的参数,也可以将Scanner看作是System.in对象的支持者,System.in取得用户输入的内容后,交给Scanner来作一些处理.
Scanner类中提供了多个方法:
      next():取得一个字符串;
      nextInt():将取得的字符串转换成int类型的整数;
      nextFloat():将取得的字符串转换成float型;
      nextBoolean():将取得的字符串转换成boolean型;

   Scanner类位于java.util包中,要加上import java.util.Scanner; 用Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入.当你输入的内容中间包括空格时,显然,使用Scanner就不能完整的获得你输入的字符串.这时候我们可以考虑使用BufferedReader类取得输入.其实在Java SE 1.4及以前的版本中,尚没有提供Scanner方法,我们获得输入时也是使用BufferReader的.


  BufferedReader类位于java.io包中,所以要使用这个类,就要引入java.io这个包

import java.io.BufferedReader. readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter返回字符.使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception).使用BufferedReader来取得输入,理解起来要复杂得多.但是使用这个方法是固定的,每次使用前先如法炮制就可以了


File

File的使用非常的简单,它有四个构造函数:

File(String parent,String child)

File(File parent,String child)

File(URI uri)

File(String pathname)

其中前面两个可以让我们在某个已知特定的目录下新建文件或者目录,后面两个我们可以通过pathname或者URI新建文件或者目录。有一点需要注重, File虽然是一个系统无关的代表,但是pathname的表示是和系统相关的,比如UNIX下"/"表示root目录,而windows下通常用盘符来表示。比如绝对路径C:helloworldmingjava,假如是相对路径的话则不以"/"开头,一般相对路径是相对当前目录的。当我们创建一个 File的时候可以通过exists()方法判定它是否存在,假如不存在我们可以选择是创建为文件还是创建为目录。

File()       构造函数,一般是依据文件所在的指定位置来创建文件对象
canWrite()   返回文件是否可以读写
canRead()    返回文件是否可读
compareTo(File pathname)检查文件路径间的顺序
createNewFile()  当文件不存在时生成文件
delete()     从文件系统内删除该文件
deleteOnExit()   程序顺利结束时删除文件
equals(Object obj) 检查特定对象的路径名是否相等
exists()    判断文件是否存在
getAbsoluteFile()    返回文件完整路径的File实例
getAbsolutePath()    返回文件完整路径
getName()     返回文件名称
getParent()   返回文件父目录路径
getPath()   返回文件路径字符串
getParentFile()  返回文件所在文件夹的路径
hashCode()    返回文件哈希码
isDirectory()   判断该路径指示的是否是目录
isFile()      判断该路径指示的是否是文件
lastModified()  返回该文件最后更改时间标志
length()  返回文件长度
list()   返回文件和目录清单
mkdir()   生成指定的目录
renameTo(File dest) 更改文件名字
setReadOnly()   将文件设置为可读
toString()   返回文件状态的字符串
toURL()    将文件的路径字符串转换成URL


FileReader和FileWreiter

几个代码如下:
(1)
 
import java.io.*;
public class FileWriterDemo {
  public static void main(String[] args) throws IOException{
   FileWriter fw=new FileWriter("E:\\demo.txt");
   //
   fw.write("abcde");//写了内存当中;
   //fw.flush();
   //fw.write("abcde");//写了内存当中;
  // fw.flush();//
   //fw.close();//关闭流资源,但关闭之前会刷新一次内部的缓冲中的数据,将数据刷新到目的地中
   //flush刷新后可继续使用流,而close刷新后,会将流关闭。
   fw.write("ab");
   fw.close();
  }
}
如果你使用FileWriter fw=new FileWriter(File file);这个构造函数,那么在fw.write(String string);事就会覆盖文件原有的内容,如果你不想被覆盖掉,那么就使用FileWriter fw=new FileWriter(File file,Boolean);注意到后面的这个boolean了吗,当boolean 设置为true事就不会覆盖了
 
 
(2)一个标准的IO处理异常程序;
import java.io.*;
public class FileWriterDemo2 {
 public static void main(String[] args) throws IOException {
  FileWriter fw = null;// 在外面进行引用()
  try
  {
   fw = new FileWriter("E:\\demo.txt");// 在try内进行初始化;创建流对象;
   fw.write("abcdefg");// 写进流里面,也就是写入内存了;
  } catch (IOException e) {
   System.out.println(e.toString());// 通用用的写法
   // throw new RuntimeException("写入失败");//专业写法
  }
  finally// 一定要执行的代码都向这里面放;这里面要单独try;
  {
   try {
    if (fw != null)// 为了提高代码的健壮性;
     fw.close();// 一定要执行要放finally;//开几个流就应该关几个流
   } catch (IOException e) {
    System.out.println(e.toString());
   }
  }
 }
}
 
 
(3)注意:在windows系统中,换行符是由\r\n来表示的,在linus系统中可用\n表示换行
 

 
//演示已有数据文件的续写;

 

import java.io.*;
public class FileWriterDemo4 {

 public static void main(String[] args) throws IOException{
  
  FileWriter fw=null;//传递一个true参数,表示不覆盖已有的文件,并在已有文件的末尾处进行数据的续写
  try {
   fw = new FileWriter("E:\\demo1.txt", true);
   fw.write("\r\nabcdef");//\r\n:在windows系统中它的回车符由 \r\n来表示的;在 linus中\n可以代表换行;
  } catch (IOException e) {
   System.out.println(e.toString());
  }
  finally
  {
   try {
    if(fw!=null);
    fw.close();
   } catch (IOException e) {
    System.out.println(e.toString());
   
  }
  
 }
}


FileInputStream:

FileInputStream 用于顺序访问本地文件,用于读取诸如图像数据之类的原始字节流,从超类InputStream中继承了read,close等方法,对文件进行操作,不支持方法和方法.它的两个常用的构造方法是:                                   FileInputStream(String filepath/*文件的全称路径*/);    FileInputStream(File fileObj/*描述该文件的File对象*/);  

  可以用这样的方法构造文件输入流:     

         (1)FileInputStream f1 = new FileInputStream("test.txt");

         (2)File f =new File("test.txt");       FileInputStream   f2 = new FileInputStream(f);

          FileInputStream重写了抽象类 InputStream的读取数据的方法:

  public int   read();    //从此输入流中读取一个数据字节                                                                                                                                                     

           public int read(byte[ ] b);//从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中

            public int read(byte[] b,int off, int len);//从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。

            如果读取数据时,输入流结束就返回-1.


FileOutputStream:

FileOutputStream用于向一个文本文件写数据.用于写入诸如图像数据之类的原始字节的流,它从超类OutputStream中继承等方法.它常用的构造方法如下:

  FileOutputStream(String filepath/*文件的全称路径*/)

        FileOutputStream(File fileobj/*描述该文件的对象*/)

        FileOutputStream(String filepath,boolean append/*如果为真,文件以追加方式打开,不覆盖已有文件的内容,如果是假,则覆盖原文件的内容*/)

        FileOutputStream(File fileObj,boolean append)

FileOutputStream的创建不依赖文件是否存在.如果filepath表示的文件不存在,FileOutputStream在打开前就创建它.如果文件存在,则打开它,准备写入内容.  如果打开一个只读文件,会引发IOException异常.


 InputStream  
//读取一个字节并以证书的形式返回(0~255) 如果返回-1已到输入流的结尾。int read()throws IoException
//读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1 int read(byte[]buffer)throws IoException
//读取length个字节 并存储到一个字节数组buffer,从length位置开始返回实际读取的字节数,如果读取前以到输入流的末尾返回-1 int read(byte[] buffer,int offset,int length)throws IoException
//关闭释放内存资源 void close()throws IoException
//跳过n个字节不读,返回实际跳过的字节数 long skip(long n)throws IoException

InputStreamReader
类 java.io.InputStreamReader
java.lang.Object
   |
   +----java.io.Reader
           |
           +----java.io.InputStreamReader

---------------------------------------------------------------------
public class InputStreamReader
extends Reader
下列类的父类:
FileReader
一个 InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。
InputStreamReader 的 read() 方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。为了达到更高效率,考虑用 BufferedReader 封装 InputStreamReader,例如:
 BufferedReader in
   = new BufferedReader(new InputStreamReader(System.in));
 
来自:
JDK1.1
参见:
BufferedReader, InputStream
---------------------------------------------------------------------
构造子索引
InputStreamReader(InputStream)
用缺省的字符编码方式,创建一个 InputStreamReader。
InputStreamReader(InputStream, String)
用已命名的字符编码方式,创建一个 InputStreamReader。
---------------------------------------------------------------------
方法索引
close()
关闭流。
getEncoding()
返回当前流使用的编码方式名。
read()
读取单一字符。
read(char[], int, int)
将若干字符读入一个数组中。
ready()
报告此流是否已准备读。
---------------------------------------------------------------------
构造子
InputStreamReader
 public InputStreamReader(InputStream in)
用缺省的字符编码方式,创建一个 InputStreamReader。
参数:
in - 一个 InputStream
InputStreamReader
 public InputStreamReader(InputStream in,
                          String enc) throws UnsupportedEncodingException
用已命名的字符编码方式,创建一个 InputStreamReader。
参数:
in - 一个 InputStream
enc - 使用的编码方式名
抛出: UnsupportedEncodingException
如果不支持名称编码
---------------------------------------------------------------------
方法
getEncoding
 public String getEncoding()
返回当前流使用的编码方式名。 如果该流已关闭则返回 null。
read
 public int read() throws IOException
读取单一字符。
返回值:
读取的字符;如果已读到流尾则返回 -1。
抛出: IOException
如果发生一 I/O 错误。
覆盖:
类 Reader 中的 read
read
 public int read(char cbuf[],
                   int off,
                 int len) throws IOException
将若干字符读入一个数组中。
参数:
cbuf - 目的缓冲区
off - 开始存储字符的偏移量。
len - 读取的最大字符数
返回值:
读取的字符数;如果已读到流尾则返回 -1。
抛出: IOException
如果发生一 I/O 错误。
覆盖:
类 Reader 中的 read
ready
 public boolean ready() throws IOException
报告此流是否已准备读。 如果它的输入缓冲不空或有可读字节,则 InputStreamReader 读就绪。
抛出: IOException
如果发生一 I/O 错误。
覆盖:
类 Reader 中的 ready
close
 public void close() throws IOException
关闭流。
抛出: IOException
如果发生一 I/O 错误。
覆盖:
类 Reader 中的 close

Scanner
jdk 5.0新增加了Scanner类,Scanner是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器,Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配(可以使用s.useDelimiter("Pattern || String")指定分隔符)。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。 
ioException 
public IOException ioException()返回此 Scanner 的基础 Readable 最后抛出的 IOException。如果不存在这样的异常,则此方法返回 null。 

返回: 
此扫描器的 readable 最后抛出的异常 

-------------------------------------------------------------------------------- 

delimiter 
public Pattern delimiter()返回此 Scanner 当前正在用于匹配分隔符的 Pattern。 

返回: 
此扫描器的分隔模式。 

-------------------------------------------------------------------------------- 

useDelimiter 
public Scanner useDelimiter(Pattern pattern)将此扫描器的分隔模式设置为指定模式。 

参数: 
pattern - 分隔模式 
返回: 
此扫描器 

-------------------------------------------------------------------------------- 

useDelimiter 
public Scanner useDelimiter(String pattern)将此扫描器的分隔模式设置为从指定 String 构造的模式。 
此方法调用 useDelimiter(pattern) 的行为与调用 hasDelimiter(Pattern.compile(pattern)) 完全相同。 


参数: 
pattern - 指定分隔模式的字符串 
返回: 
此扫描器 

-------------------------------------------------------------------------------- 

locale 
public Locale locale()返回此扫描器的语言环境。 
扫描器的语言环境会影响其与正则表达式匹配的默认基元的许多元素;参见上面的本地化数字。 


返回: 
此扫描器的语言环境 

-------------------------------------------------------------------------------- 

useLocale 
public Scanner useLocale(Locale locale)将此扫描器的语言环境设置为指定的语言环境。 
扫描器的语言环境会影响其与正则表达式匹配的默认基元的许多元素;参见上面的本地化数字。 


参数: 
locale - 指定要使用的语言环境的字符串 
返回: 
此扫描器 

-------------------------------------------------------------------------------- 

radix 
public int radix()返回此扫描器的默认基数。 
扫描器的基数会影响其与正则表达式匹配的默认数的元素;参见上面的本地化数字。 


返回: 
此扫描器的默认基数 

-------------------------------------------------------------------------------- 

useRadix 
public Scanner useRadix(int radix)将此扫描器的默认基数设置为指定基数。 
扫描器的基数会影响其与正则表达式匹配的默认数的元素;参见上面的本地化数字。 

如果该基数小于 Character.MIN_RADIX 或大于 Character.MAX_RADIX,则抛出 IllegalArgumentException。 


参数: 
radix - 扫描数时要使用的基数 
返回: 
此扫描器 
抛出: 
IllegalArgumentException - 如果基数超出范围 

-------------------------------------------------------------------------------- 

match 
public MatchResult match()返回此扫描器所执行的最后扫描操作的匹配结果。如果未执行匹配操作,或者最后的匹配操作失败,则此方法抛出 IllegalStateException。 
如果 Scanner 的不同 next 方法执行结束时未抛出异常,则它们会给出一个匹配结果。例如,调用了 nextInt() 方法(它返回一个 int)后,此方法返回一个 MatchResult,作为搜索上述 Integer 正则表达式的结果。类似地,如果 findInLine(java.lang.String)、findWithinHorizon(java.lang.String, int) 和 skip(java.util.regex.Pattern) 方法的调用成功,则它们会给出一个匹配结果。 


返回: 
最后一次匹配操作的匹配结果 
抛出: 
IllegalStateException - 如果未给出匹配结果 

-------------------------------------------------------------------------------- 

toString 
public String toString()返回此 Scanner 的字符串表示形式。Scanner 的字符串表示形式包含了对调试可能有用的信息。没有指定确切格式。 


覆盖: 
类 Object 中的 toString 
返回: 
此扫描器的字符串表示形式。 

-------------------------------------------------------------------------------- 

hasNext 
public boolean hasNext()如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。 

指定者: 
接口 Iterator<String> 中的 hasNext 
返回: 
当且仅当此扫描器有另一个标记时才返回 true 
抛出: 
IllegalStateException - 如果此扫描器已关闭 
另请参见: 
Iterator 

-------------------------------------------------------------------------------- 

next 
public String next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息。即使以前调用 hasNext() 返回了 true,在等待要扫描的输入时此方法也可能阻塞。 

指定者: 
接口 Iterator<String> 中的 next 
返回: 
下一个标记 
抛出: 
NoSuchElementException - 如果没有更多标记可用 
IllegalStateException - 如果此扫描器已关闭 
另请参见: 
Iterator 

-------------------------------------------------------------------------------- 

remove 
public void remove()Iterator 的这种实现不支持移除操作。 

指定者: 
接口 Iterator<String> 中的 remove 
抛出: 
UnsupportedOperationException - 如果调用此方法。 
另请参见: 
Iterator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值