java_字符流与字节流文件操作

时间:2022-06-18 16:03:44

字符流:

FileReader

FileWriter。

 

BufferedReader

BufferedWriter

 

字节流:

FileInputStream

FileOutputStream

 

BufferedInputStream

BufferedOutputStream

 

读取键盘录入。

System.out:对应的是标准输出设备:控制台。

System.in:对应的标准输入设备:键盘。

 

将字节流转成字符流在使用字符流缓冲区的readLine方法

import java.io.*;

class TransStreamDemo

{

       publicstatic void main(String[] args) throws IOException

       {

              //获取键盘录入对象。

              //InputStreamin = System.in;

 

              //将字节流对象转成字符流对象,使用转换流。InputStreamReader

              //InputStreamReaderisr = new InputStreamReader(in);

 

              //为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

              //BufferedReaderbufr = new BufferedReader(isr);

 

              //键盘的最常见写法。

              BufferedReaderbufr =

                            newBufferedReader(new InputStreamReader(System.in));

      

//            OutputStreamout = System.out;

//            OutputStreamWriterosw = new OutputStreamWriter(out);

//            BufferedWriterbufw = new BufferedWriter(osw);

              BufferedWriterbufw = new BufferedWriter(new OutputStreamWriter(System.out));

 

              Stringline = null;

              while((line=bufr.readLine())!=null)

              {

                     if("over".equals(line))

                            break;

                     bufw.write(line.toUpperCase());

                     bufw.newLine();

                     bufw.flush();

              }

              bufr.close();

       }

}

 

 

缓冲区的出现是为了提高流的操作效率而出现的。

所以在创建缓冲区之前,必须要先有流对象。

该缓冲区中提供了一个跨平台的换行符。newLine();

 

import java.io.*;

class BufferedWriterDemo

{

       publicstatic void main(String[] args) throws IOException

       {

              //创建一个字符写入流对象。

              FileWriterfw = new FileWriter("buf.txt");

 

              //为了提高字符写入流效率。加入了缓冲技术。

              //只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。

              BufferedWriterbufw = new BufferedWriter(fw);

 

              for(intx=1; x<5; x++)

              {

                     bufw.write("abcd"+x);

                     bufw.newLine();

                     bufw.flush();

              }

              //只要用到缓冲区,就要记得刷新。

              //bufw.flush();

 

              //其实关闭缓冲区,就是在关闭缓冲区中的流对象。

              bufw.close();

       }

}

 

 

字符读取流缓冲区:

该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。

当返回null时,表示读到文件末尾。

readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。

 

import java.io.*;

class BufferedReaderDemo

{

       publicstatic void main(String[] args) throws IOException

       {

              //创建一个读取流对象和文件相关联。

              FileReaderfr = new FileReader("buf.txt");

 

              //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。

              BufferedReaderbufr = new BufferedReader(fr);

             

String line = null;

              while((line=bufr.readLine())!=null)

              {

                     System.out.print(line);

              }

              bufr.close();

       }

}

 

 

装饰设计模式:

当想要对已有的对象进行功能增强时,

可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。

那么自定义的该类称为装饰类。

装饰类通常会通过构造方法接收被装饰的对象。

并基于被装饰的对象的功能,提供更强的功能。

class Person

{

       publicvoid chifan()

       {

              System.out.println("吃饭");

       }

}

 

class SuperPerson

{

       privatePerson p ;

       SuperPerson(Personp)

       {

              this.p= p;

       }

       publicvoid superChifan()

       {

              System.out.println("开胃酒");

              p.chifan();           

              System.out.println("甜点");

              System.out.println("来一根");

       }

}

 

class PersonDemo

{

       publicstatic void main(String[] args)

       {

              Personp = new Person();

              SuperPersonsp = new SuperPerson(p);

              sp.superChifan();

       }

}

 

 

File类常见方法:

1,创建。

       booleancreateNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。

       输出流对象一建立创建文件。而且文件已经存在,会覆盖。

 

       booleanmkdir():创建文件夹。

       booleanmkdirs():创建多级文件夹。

 

2,删除。

       booleandelete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。

       voiddeleteOnExit();在程序退出时删除指定文件。

 

 

3,判断。

       booleanexists() :文件是否存在.

       isFile():

       isDirectory();

       isHidden();

       isAbsolute();

 

4,获取信息。

       getName():

       getPath():

       getParent():;//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。

//如果相对路径中有上一层目录那么该目录就是返回结果。

 

       getAbsolutePath()

       longlastModified()

       longlength()

 

 

 

列出指定目录下所有内容。

递归:

public static void showDir(File dir,intlevel)

       {

              System.out.println(getLevel(level)+dir.getName());

 

              level++;

              File[]files = dir.listFiles();

              for(intx=0; x<files.length; x++)

              {

                     if(files[x].isDirectory())

                            showDir(files[x],level);

                     else

                            System.out.println(getLevel(level)+files[x]);

              }

       }

 

 

将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。

递归:

public static void fileToList(Filedir,List<File> list)

       {

              File[]files = dir.listFiles();

 

              for(Filefile : files)

              {

                     if(file.isDirectory())

                            fileToList(file,list);

                     else

                     {

                            if(file.getName().endsWith(".java"))

                                   list.add(file);

                     }

              }

       }

 

 

利用递归方法求5!。   
public class lianxi22 {
public static void main(String[] args) {
       int n = 5;
    rec fr = new rec();
    System.out.println(n+"! = "+fr.rec(n));
}
}
class rec{
public long rec(int n) {
    long value = 0 ;
    if(n ==1 ) {
     value = 1;
    } else   {
     value = n * rec(n-1);
    }
    return value;
}
}

 

 

 

打印流方法,可以将各种数据类型的数据都原样打印。

字节打印流:PrintStream

字符打印流:PrintWriter

import java.io.*;

class PrintStreamDemo

{

       publicstatic void main(String[] args) throws IOException

       {

              BufferedReaderbufr =

                     newBufferedReader(new InputStreamReader(System.in));

 

              PrintWriterout = new PrintWriter(new FileWriter("a.txt"),true);

 

              Stringline = null;

              while((line=bufr.readLine())!=null)

              {

                     if("over".equals(line))

                            break;

                     out.println(line.toUpperCase());

                     //out.flush();  

              }

              out.close();

              bufr.close();

       }    

}

 

 

删除一个带内容的目录。

删除原理:

在window中,删除目录从里面往外删除的。

既然是从里往外删除。用到递归。

import java.io.*;

class RemoveDir

{

       publicstatic void main(String[] args)

       {

              Filedir = new File("d:\\testdir");

              removeDir(dir);

       }

 

       publicstatic void removeDir(File dir)

       {

              File[]files = dir.listFiles();

              for(intx=0; x<files.length; x++)

              {

                     if(files[x].isDirectory())

                            removeDir(files[x]);

                     else

                            System.out.println(files[x].toString()+":-file-:"+files[x].delete());

              }

              System.out.println(dir+"::dir::"+dir.delete());

       }

}

 

利用递归方法求5!。   
public class lianxi22 {
public static void main(String[] args) {
       int n = 5;
    rec fr = new rec();
    System.out.println(n+"! = "+fr.rec(n));
}
}
class rec{
public long rec(int n) {
    long value = 0 ;
    if(n ==1 ) {
     value = 1;
    } else   {
     value = n * rec(n-1);
    }
    return value;
}
}