码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习总结(7)——(File类,IO流,(缓冲流,转换流等),Properties类)

时间:2018-01-21 19:14:36      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:更新   rri   eclips   delete   写入   show   out   boost   def   

一.File

  1. java.io.File类代表系统文件(文件和目录)

  2. 访问文件属性步骤

    (1)创建文件对象

           格式:File file=new File(String pathname);

    (2)调用方法:操作文件目录的属性(路径,权限,日期和时间等)

  3. File类的属性(separator默认名称分隔符)

    (1)在UNIX系统上,此字段的值为 / ;window系统上,它为‘\

    (2)为了程序的跨平台性,文件的路径应该用这个属性值来代表

  4. File类的常用方法

方法名称

说明

Boolean exists()

判断文件或目录是否存在

Boolean  isFile()

判读那是否是文件

Boolean isDirectory()

判断是否是目录

String getName()

返回此对象表示的文件或目录的名称

String getPath()

返回此对象的文件相对的路径名

String getAbsolutePath()

返回此对象表示的文件的绝对路径名

Boolean delete()

删除此对象指定文件或目录

Boolean greateNewFile()

创建名称的空文件,不创建文件夹

Long.length()

返回文件的长度,单位为字节,如果文件不存在,则返回0L

Boolean mkdir()

创建此抽象路径名指定的目录

Boolean mkdirs()

创建此抽象路径名指定的目录,包括所必须但不存在的目录

String[] list()

返回此目录中的文件名和目录名的数组

File[] listFiles()

返回此目录中的文件和目录的File实例数组

1(以上述方法为例):

package file;

 

import java.io.*;

 

public class FileDemo {

 

    public static void main(String[] args) {

        File f=new File("e:"+File.separator+"test01");

        boolean flag=f.mkdir();

        System.out.println(flag?"文件创建成功":"文件创建失败");

        System.out.println(f.getPath());

        System.out.println(f.getParent());

        File f1=new File("e:"+File.separator+"test01"+File.separator+"tset02"+File.separator+"test03");

        boolean f0=f1.mkdir();

        System.out.println(f0?"文件创建成功":"文件创建失败");

        boolean flag1=f1.mkdirs();

        System.out.println(flag1?"文件创建成功":"文件创建失败");

        System.out.println(f1.getPath());

        System.out.println(f1.getParent());

    }

 

}

运行结果为:

                文件创建成功

                e:\test01

                e:\

                文件创建失败

                文件创建成功

                e:\test01\tset02\test03

                e:\test01\tset02

                2(同以上述方法为例):

package file;

 

import java.io.*;

 

public class FileMedthDemo {

 

    public static void main(String[] args) {

        File f=new File("e:"+File.separator+"test01");

        if(f.exists()){

            f.delete();

            System.out.println("文件以删除~~~");

        }else{

            try {

            f.createNewFile();

            System.out.println("文件以创建成功!!!");

        } catch (IOException e) {

            e.printStackTrace();

            }

        }

    }

 

}

运行结果为:

        文件以创建成功!!!

3(以 listFile()方法为例,遍历d盘中Licenses目录下的所有文件名):

package file;

 

import java.io.File;

 

public class ListFileDemo {

 

    public static void main(String[] args) {

        File f=new File("d:"+File.separator+"Licenses");

        File[] files=f.listFiles();

        System.out.println("Licenses中的文件个数是:"+files.length);

        System.out.println("遍历得到的Licenses中所有文件名是:");

        for(File fi:files){

            System.out.println(fi);

        }

 

}

 

}

运行结果为:

Licenses中的文件个数是:52

遍历得到的Licenses中所有文件名是:

d:\Licenses\Apache 2.0 License - English.pdf

d:\Licenses\Boost 1.0 License - English.pdf

d:\Licenses\BSD 3-clause License - English.rtf

.................等等(文件太多不全部表示,明白即可)

练习题:递归遍历文件夹(以d盘为例)

package file;

 

import java.io.File;

 

public class ShowAllFile {

 

public static void main(String[] args) {

File f=new File("d:"+File.separator);

showAllFiles(f);

 

}

 

public static void showAllFiles(File f){

if(f!=null){

if(f.isDirectory()){   // 是否为目录

File[] files=f.listFiles();   // 返回当前正在遍历的目录中的文件和目录的File实例数组

                if(files!=null){

                 for(File file:files){

                  showAllFiles(file);

                 }

                }

}else{

System.out.println(f.getPath());

}

}

}

 

 

}

运行结果:

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\d5\906a7bc527f9001714258078aa1e333d

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\d6\104a5b0059f8001717a2e0c7060c64aa

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\d6\70bfedd764f8001717a2e0c7060c64aa

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\d7\700032f253fb00171db3c17fb618e481

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\d7\e05b3c1bb3e8001715a0bf823f4db32a

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\da\2014f5fa43f9001714258078aa1e333d

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\da\506eb837d3fd0017115f946708cf4cf7

d:\workspace\.metadata\.plugins\org.eclipse.core.resources\.history\da\806422da5bfc00171659a677f877470f

.......................................等等(文件太多不在此全部显示了)

二.IO流的基本原理

1.数据 流(Stream)是指数据通信的通道

2.java程序中对程序的输入,输出操作是以流的方式进行的。JDK中提供了各种的“流”流类来获取不同种类的数据

文件-----010110101--------------》程序

文件《----------010100010010-----程序

网络连接--------01010011001------》程序

文件---010101----》——java——> 程序

三.IO流的分类

  1. 按流向分:

    (1)输入流:程序从数据源读取数据的流

    (2)输出流:程序向数据原写入数据的流

  2. 按数据传输单位分:

    (1)字节流:以字节为单位传输数据的流

    (2)字符流:以字符为单位传输数据的流

  3. 按功能分:

    (1)节点流:用于直接操作目标设备的流

    (2)处理流:是对一个已存在的连接和封装,通过对数据的处理为程序提供更为强大,灵活的读写功能

  4. JDK所提供的所有流类位于javan.io包中,都分别继承以下四种抽象类

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

  1. IO流四个抽象类的重要方法

    <1>InputStream:read(xx)读取字节系列方法

    <2>OutputStream:writer(xx)写入字节系列方法

    <3>Reader:read(xx)读取字符系列方法

    <4>Writer:writer(xx)写入字符系列方法

四.文件字节流与文件字符流

  1. 文件字节流:

    FileInputStreamFileOutputStream

  2. 文件字符流:

    FileReaderFileWriter

  3. FileInputStream类构造方法

    (1)FileInputStream(File file)

    (2)FileInputStream(String name)

    1(以读取D盘中message.txt文件为例):

package stream;

 

import java.io.*;

 

public class FileInputStreamDemo {

 

    public static void main(String[] args) {

        File f=new File("d:"+File.separator+"message.txt");

        InputStream input=null;

        try {

            input=new FileInputStream(f);

            byte[] b=new byte[1024];

            int len=0;

            while((len=input.read(b))!=-1){

            System.out.println(new String(b));

            }

        } catch (Exception e) {

            e.printStackTrace();

        }finally{

        try {

            input.close();

        } catch (IOException e) {

            e.printStackTrace();

            }

        }

 

    }

 

}

运行结果为:

举办年份|举办地|冠军国

1930|巴拉圭|巴拉圭

1934|意大利|法国

1938|法国|巴西

1942|巴西|巴西

1946|美国|意大利

1952|德国|中国

1956|波兰|瑞士

1960|英国|德国

4.FileOutputStream构造方法

(1)FileOutputStream(File file)

(2)FileOutputStream(String name)

(3)FileOutputStream(String name,boolean append)//追加模式

注意:<1>前两种构造方法在向文件中写入数据时将覆盖文件中原有的内容

          <2>创建FileOutputStream实例时,如果相应的文件并不存在,则会自动建成一个空的文件

例(创建一个文件并写入内容):

package stream;

 

import java.io.*;

 

public class FileOutputStreamDemo {

 

public static void main(String[] args) {

OutputStream output=null;

try {

output=new FileOutputStream("e:"+File.separator+"test03",true);

output.write("×××中央人民政府".getBytes());

output.write("AAFUDSJESG".getBytes());

byte[] b="法兰西第一帝国".getBytes();

output.write(b, 0, 7);

System.out.println("写入成功");

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

output.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

}

 

}

运行结果为:

写入成功(如下图片)

 

5.FileReader类构造方法

(1)FileReader(File file):在给定File从中读取数据的File的情况下创建一个新的FileReader

(2)FileReader(String fileName):在给定从中读取数据数据的文件名的情况下创建一个新的FileReader

例:

package stream;

 

import java.io.*;

 

public class FileReaderDemo {

 

public static void main(String[] args) {

Reader r=null;

try {

r=new FileReader("d:"+File.separator+"test05");

char[] b=new char[1024];

int len=0;

while((len=r.read(b))!=-1){

System.out.println(b);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

r.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

}

 

}

运行结果为:

中国acfA123243546×××

6.FileWriter类构造方法:

1FileWriter(File file) :根据给定的 File 对象构造一个 FileWriter

2FileWriter(File file, boolean append) :根据给定的 File 对象构造一个 FileWriter 对象。

3FileWriter(String fileName) :根据给定的文件名构造一个 FileWriter 对象。

4FileWriter(String fileName, boolean append):根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

例:

package stream;

 

import java.io.*;

 

public class FileWriterDemo {

 

public static void main(String[] args) {

Writer wr=null;

try {

wr=new FileWriter("d:"+File.separator+"test05");

wr.write("中国");

char[] b={'a','c','f','A'};

wr.write(b);

wr.write("123243546");

String  str="×××";

wr.write(str);

wr.flush();

System.out.println("写入成功~~~");

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

wr.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

}

 

}

运行结果:写入成功~~~

 

五.缓冲流

  1. 缓冲流是处理流的一种,建立在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,还增加了一些新的方法

  2. JDK提供了四种缓冲流

    (1)BufferedInputStream可以对InputStream流进行包装

    (2)BuffereedOutputStream可以对任何的OutputStream流进行包装

    (4)BufferedReader可以对任何的Reader流进行包装

         *还增加了readLine()方法用于一次读取一行字符串

    (4)BufferedWriter可以对任何的Writer流进行包装

         *新增了方法newLine()用与写出一个行分隔符

  3. 对于缓冲输出流,写出的数据会缓存在内存缓存区中,关闭此流前要用flush()方法将缓存区中的数据立即写出,关闭缓存流会自动关闭缓存流所包装的所有底层流

    1(以读取d盘中的message.txt文件为例,应用BufferedInputStream缓存流)

    package buffered;

     

    import java.io.*;

     

    public class BufferedInputStreamDemo {

     

    public static void main(String[] args) {

    File f=new File("d:"+File.separator+"message.txt");

    InputStream input=null;

    BufferedInputStream bis=null;

    try {

    input=new FileInputStream(f);

    bis=new BufferedInputStream(input);

    byte[] b=new byte[1024];

    int len=0;

    System.out.println("开始使用缓存流 进行读取:");

    while((len=bis.read(b))!=-1){

    System.out.println(new String(b));

    }

    System.out.println("缓存流读取结束~~~");

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    bis.close();

    input.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

    }

     

    }

    运行结果为:

    开始使用缓存流 进行读取:

    举办年份|举办地|冠军国

    1930|巴拉圭|巴拉圭

    1934|意大利|法国

    1938|法国|巴西

    1942|巴西|巴西

    1946|美国|意大利

    1952|德国|中国

    1956|波兰|瑞士

    1960|英国|德国

    缓存流读取结束~~~

    2BuffereedOutputStream缓存流的应用):

    package buffered;

     

    import java.io.*;

     

    public class BufferedOutputStreamDemo {

     

    public static void main(String[] args) {

    OutputStream output=null;

    BufferedOutputStream bos=null;

    try {

    output=new FileOutputStream("d:"+File.separator+"test09");

    bos=new BufferedOutputStream(output);

    bos.write("ABFSHEFEG".getBytes());

    bos.flush();

    System.out.println("写入成功~~");

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    output.close();

    bos.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

    }

     

    }

    运行结果为:写入成功~~

     

    3BufferedReader缓存流的应用):

    package buffered;

     

    import java.io.*;

     

    public class BufferedReaderDemo {

     

    public static void main(String[] args) {

    Reader re=null;

    BufferedReader br=null;

    int count=0;

    try {

    re=new FileReader("d:"+File.separator+"message.txt");

    br=new BufferedReader(re);

    String str="";

    while((str=br.readLine())!=null){

    count++;

    System.out.println(count+"  "+str);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    re.close();

    br.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

    }

     

    }

    运行结果为:

    1  举办年份|举办地|冠军国

    2  1930|巴拉圭|巴拉圭

    3  1934|意大利|法国

    4  1938|法国|巴西

    5  1942|巴西|巴西

    6  1946|美国|意大利

    7  1952|德国|中国

    8  1956|波兰|瑞士

    9  1960|英国|德国

    4BufferedWriter缓冲流的应用):

    package buffered;

     

    import java.io.*;

     

    public class BufferedWriterDemo {

     

    public static void main(String[] args) {

    Writer wr=null;

    BufferedWriter bw=null;

    try {

    wr=new FileWriter("e:"+File.separator+"test.txt");

    bw=new BufferedWriter(wr);

    bw.write("\t"+"白日依山尽");

    bw.newLine();

    bw.write("\t"+"黄河入海流");

    bw.newLine();

    bw.write("\t"+"欲穷千里目");

    bw.newLine();

    bw.write("\t"+"更上一层楼");

    bw.newLine();

    bw.flush();

    System.out.println("写入成功");

    } catch (IOException e) {

    e.printStackTrace();

    }finally{

    try {

    wr.close();

    bw.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

    }

     

    }

    运行结果为:写入成功

     

    六.转换流

    &&*IO包中,实际上只有字节流,字符流是在字节流的基础上转换出来的。

    *转换流用于在字节流和字符流之间转换。

    *JDK提供了两种转换流

    1.InputStreamReader:

    (1)Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。

    (2)InputStreamReader需要和InputStream“套接”,它可以将字节流中读入的字节解码成字符

    2.OutputStreamWriter

    (1)Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。

    (2)OutputStreamWriter需要和OutputStream“套接”,它可以将要写入字节流的字符编码成字节

    3.转换步骤:

    1)写出数据:程序—转换流—>OutputStreamWriter—字节流—>文件

    2)读入数据:程序<—转换流—ItputStreamWriter<—字节流—文件

    1InputStreamReader转换流):

    package convert;

    import java.io.*;

    public class InputStreamReaderDemo {

     

    public static void main(String[] args) {

    InputStreamReader isr=new InputStreamReader(System.in);   // 包装的是读取键盘输入的输入流

    BufferedReader br=new BufferedReader(isr);   // 将InputStreamReader包装到BufferedReader

    System.out.print("请输入:");

    try {

    String content=br.readLine();   // 读取键盘输入,输入完成之前一直阻塞

    System.out.println("您输入的内容是:"+content);

    } catch (IOException e) {

    e.printStackTrace();

    }finally{

    try {

    br.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

     

    }

    运行结果为:请输入:1但是如果发生过

    您输入的内容是:1但是如果发生过

    2OutputStreamWriter转换流应用):

    package convert;

     

    import java.io.*;

     

    public class OutputStreamWriterDemo {

     

    public static void main(String[] args) {

    OutputStream out=null;

    OutputStreamWriter osw=null;

    BufferedWriter bw=null;

    try {

    out=new FileOutputStream("e:"+File.separator+"mess.txt");

    osw=new OutputStreamWriter(out);   // 将out对象包装到OutputStreamWriter对象中

    bw=new BufferedWriter(osw);    // 将osw对象包装到BufferedWriter对象中

    bw.write("hello java");

    bw.newLine();  // 换行

    bw.write("中国");

    System.out.println("写入成功!");

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    bw.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

     

    }

     

    }

    运行结果为:写入成功!

     

    3指定InputStreamReader的编码指定InputStreamReader的编码

    package convert;

     

    import java.io.*;

     

    public class DecodeDemo {

     

    public static void main(String[] args) {

    InputStream input=null;

            InputStreamReader isr=null;

            try {

    input=new FileInputStream("c:"+File.separator+"test.txt");

    isr=new InputStreamReader(input,"utf-8");  // 指定InputStreamReader的编码

    char[] c=new char[1024];

    int len=isr.read(c);

    System.out.println("读取的内容是:"+new String(c,0,len));

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    isr.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

     

    }

    运行结果为:读取的内容是:?й?acfA123243546?л???????

    4OutputStreamWriter设置编码):

    package convert;

     

    import java.io.*;

     

    public class EncodeDemo {

     

    public static void main(String[] args) {

    OutputStream out=null;

    OutputStreamWriter osw=null;

    try {

    out=new FileOutputStream("c:"+File.separator+"test.txt");

    osw=new OutputStreamWriter(out,"utf-8");   // 对OutputStreamWriter设置编码

    osw.write("×××");

    osw.flush();

    System.out.println("写入成功!");

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    osw.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

     

    }

     

    }

    运行结果:写入成功

     

    七.Properties类补充其属于Hashtable的子类

    1.Java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件中的格式是“键=值”的格式,在properties文件中可以用#来注释。

    2.Properties中的重要方法

    1getProperty(String key),用于指定的键在此列属性表中搜索属性,也就是通过该参数key,得到对应的value

    2load(inputStream inStream)从输入流中读取属性列表(键和元素对),通过对指定的文件进行装载来获取该文件中的所有键值对,以供getProperty(String key)方法来搜索

    3setProperty(String key,String value)调用Hashtable的方法put方法,他通过调用基类的put方法来设置键值对

    4storeOutputStream out,String comments)以适合使用load方法加载到Properties表中的格式,将此Properties表中的属性列表(键值元素对)写入输入流,与load方法相反,该方法将键值对写入到指定文件中去

    5clear(),清除所有转载的键值对,该方法是在基类中提供

    1storeOutputStream out,String comments)方法的应用):

    package properties;

     

    import java.io.File;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.OutputStream;

    import java.util.Properties;

     

    public class PropertiesStore {

     

    public static void main(String[] args) {

    Properties pro=new Properties();

    pro.setProperty("mode","OPEN");

    pro.setProperty("isVIP","no");

    pro.setProperty("updatetime","20180101");

            OutputStream out=null;

            try {

    out=new FileOutputStream("c:"+File.separator+"myinfo.properties");

    pro.store(out,"this is my default information");    // 写入属性文件中

    System.out.println("属性文件写入成功!");

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    out.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

     

    }

    运行结果为:属性文件写入成功

    2load(inputStream inStream)应用方法):

    package properties;

     

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

     

    public class PropertiesLoadDemo {

     

    public static void main(String[] args) {

    Properties pro=new Properties();

    InputStream input=null;

    try {

    input=new FileInputStream("d:"+File.separator+"myinfo.properties");

    pro.load(input);   // 从字节流中读取数据加载到Properties

    System.out.println("是否为VIP"+pro.getProperty("isVIP"));

    System.out.println("上次更新时间:"+pro.getProperty("updatetime"));

    System.out.println("应用模式:"+pro.getProperty("mode"));

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    input.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

     

    }

     

    }

    运行结果为:是否为VIPno

    上次更新时间:20180101

    应用模式:OPEN

    练习:

    1.要求从键盘输入两个数字,之后完成两个整数的加法操作。

    eg: 3回车,5回车--->8,键盘必须输入的是数字。

    解析:

    package work01;

     

    import java.io.*;

     

    public class SumNumber {

     

    public static void main(String[] args) {

    InputStreamReader isr=new InputStreamReader(System.in);

    BufferedReader br=new BufferedReader(isr);

    System.out.print("请输入加数一:");

    try {

    String x=br.readLine();

    int t=Integer.parseInt(x);

    System.out.print("请输入加数二:");

    String y=br.readLine();

    int h=Integer.parseInt(y);

    int temp=(t+h);

    System.out.println("加的结果为:"+temp);

    } catch (IOException e) {

    e.printStackTrace();

    }finally{

    try {

    isr.close();

    br.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

     

    }

    }

     

    }

    运行结果为:请输入加数一:3

    请输入加数二:6

    加的结果为:9

     

       2.先从键盘输入文件名称,再输入内容,根据输入的文件名称创建

         文件,并且将内容写入文件。

    解析:

    package work01;

     

    import java.io.*;

     

    public class TxtDemo {

     

    public static void main(String[] args) {

    InputStreamReader isr=new InputStreamReader(System.in);

    BufferedReader br=new BufferedReader(isr);

    Writer wr=null;

    BufferedWriter bw=null;

    try {

    System.out.print("请输入文件名:");

    String txtName=br.readLine();

    wr=new FileWriter("d:"+File.separator+txtName,true);

    bw=new BufferedWriter(wr);

    System.out.print("请输入文件内容:");

    String str=br.readLine();

    bw.write(str);

    bw.flush();

    bw.newLine();

    String str1=br.readLine();

    bw.write(str1);

    bw.flush();

    bw.newLine();

     

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    isr.close();

    br.close();

    bw.close();

    wr.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

     

    }

    运行结果为:请输入文件名:dhdh

    请输入文件内容:hyrshdfh

    sfdhyfdhj

     

      3.读取message.txt文件,根据文件中的内容查询相应的年份、举办地、冠军国

      先给出客户选择提示:通过年份查询1,通过举办地查询2,通过冠军国

      查询3,退出0:

      若用户选择通过年份查询,则根据输入的年份,查询出当年的举办地和冠军国;

      若用户选择通过冠军国查询,则输出该国的举办年份和举办地;

      若用户选择通过举办地查询,则输出该举办地的举办年份和冠军国。

     解析:

    世界杯类:

    package wc;

     

    public class WordCup {

    private String year;

    private String address;

    private String winner;

     

    public WordCup() {

    super();

    }

     

    public WordCup(String year, String address, String winner) {

    super();

    this.year = year;

    this.address = address;

    this.winner = winner;

    }

     

    public String getYear() {

    return year;

    }

     

    public void setYear(String year) {

    this.year = year;

    }

     

    public String getAddress() {

    return address;

    }

     

    public void setAddress(String address) {

    this.address = address;

    }

     

    public String getWinner() {

    return winner;

    }

     

    public void setWinner(String winner) {

    this.winner = winner;

    }

     

    @Override

    public String toString() {

    return "WordCup [year=" + year + ", address=" + address + ", winner="

    + winner + "]";

    }

     

    }

    世界杯工具类:

    package wc;

     

    import java.io.*;

    import java.util.*;

     

    public class WordCupUtil {

    private static List<WordCup> list=new ArrayList<>();

    static{

    File f=new File("d:"+File.separator+"message.txt");

    Reader r=null;

    BufferedReader br=null;

    try {

    r=new FileReader(f);

    br=new BufferedReader(r);

    br.readLine();

    String str="";

    while((str=br.readLine())!=null){

    String[] array=str.split("\\|");

    WordCup wc=new WordCup(array[0],array[1],array[2]);

    list.add(wc);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }finally{

    try {

    r.close();

    br.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    //通过年份查询信息

    public static WordCup infoByYear(String year){

    for(WordCup wc:list){

    if(wc.getYear().equals(year)){

    return wc;

    }

    }

    return null;

    }

    //通过举办地查询信息

    public static List<WordCup> infoByAdress(String adress){

    List<WordCup> resultlist=new ArrayList<>();

    for(WordCup wc:list){

    if(wc.getAddress().equals(adress)){

    resultlist.add(wc);

    }

    }

    return resultlist;

    }

    //通过冠军国查询信息

    public static List<WordCup> infoByWinner(String winner){

    List<WordCup> resultlist=new ArrayList<>();

    for(WordCup wc:list){

    if(wc.getWinner().equals(winner)){

    resultlist.add(wc);

    }

    }

    return resultlist;

    }

    }

    世界杯测试类:

    package wc;

     

    import java.io.*;

    import java.util.List;

     

    public class TestWc {

     

    public static void main(String[] args) {

    WordCupUtil wcu=new WordCupUtil();

    InputStreamReader isr=new InputStreamReader(System.in);

    BufferedReader br=new BufferedReader(isr);

    System.out.println("开始读取文件!!!");

    System.out.println("1  通过年份查询信息    2 通过举办地查询信息  3 通过冠军国查询信息   0 退出系统 ");

    System.out.print("请输入你的选择:");

    try {

    String chioce=br.readLine();

    switch(chioce){

    case "1":

    System.out.print("请输入你要查询的年份:");

    String year=br.readLine();

    WordCup str=wcu.infoByYear(year);

    System.out.println("显示查询结果 :");

    System.out.println(str);

    break;

    case "2":

    System.out.print("请输入你要查询的举办地:");

    String adress=br.readLine();

    List<WordCup> list=wcu.infoByAdress(adress);

    System.out.println("显示查询结果:");

    for(WordCup wc:list){

    System.out.print(wc+"\n");

    }

    break;

    case "3":

    System.out.print("请输入你要查询的冠军国:");

    String winner=br.readLine();

    List<WordCup> list1=wcu.infoByWinner(winner);

    System.out.println("显示查询结果:");

    for(WordCup wc:list1){

    System.out.print(wc+"\n");

    }

    break;

    case "0":

    System.out.print("你选择退出系统,正在退出~~~");

    System.exit(0);

    default:

    System.out.println("未找到匹配数据,运行结束!!!");

    break;

     

    }

    } catch (IOException e) {

    e.printStackTrace();

    }finally{

    try {

    isr.close();

    br.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

     

    }

     

    }

    运行结果:

    1):

    开始读取文件!!!

    1  通过年份查询信息    2 通过举办地查询信息  3 通过冠军国查询信息   0 退出系统

    请输入你的选择:1

    请输入你要查询的年份:1930

    显示查询结果

    WordCup [year=1930, address=乌拉圭, winner=乌拉圭]

    2

    开始读取文件!!!

    1  通过年份查询信息    2 通过举办地查询信息  3 通过冠军国查询信息   0 退出系统

    请输入你的选择:2

    请输入你要查询的举办地:意大利

    显示查询结果:

    WordCup [year=1934, address=意大利, winner=意大利]

    WordCup [year=1990, address=意大利, winner=德国]

    3

    开始读取文件!!!

    1  通过年份查询信息    2 通过举办地查询信息  3 通过冠军国查询信息   0 退出系统

    请输入你的选择:3

    请输入你要查询的冠军国:巴西

    显示查询结果:

    WordCup [year=1958, address=瑞典, winner=巴西]

    WordCup [year=1962, address=智利, winner=巴西]

    WordCup [year=1970, address=墨西哥, winner=巴西]

    WordCup [year=1994, address=美国, winner=巴西]

    WordCup [year=2002, address=韩国和日本, winner=巴西]

    4

    开始读取文件!!!

    1  通过年份查询信息    2 通过举办地查询信息  3 通过冠军国查询信息   0 退出系统

    请输入你的选择:0

    你选择退出系统,正在退出~~~

    5

    开始读取文件!!!

    1  通过年份查询信息    2 通过举办地查询信息  3 通过冠军国查询信息   0 退出系统

    请输入你的选择:刚好是梵蒂冈

    未找到匹配数据,运行结束!!!

    4.复制图片练习

    解析:

    package fileinputstream;

     

    import java.io.*;

     

    public class CopyImage {

     

    public static void main(String[] args) {

    File src=new File("d:"+File.separator+"java.png");

    File dest=new File("e:"+src.getName());

    copy(src,dest);

    }

    public static void copy(File src,File dest){

    InputStream input=null;

    FileOutputStream out=null;

    try {

    input=new FileInputStream(src);

    out=new FileOutputStream(dest);

    byte[] b=new byte[1024];

    int len=0;

    try {

    while((len=input.read(b))!=-1){

    out.write(b, 0, len);

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    System.out.println("图片复制成功~~~");

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    }finally{

    try {

    out.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

     

    }

    运行结果:图片复制成功~~~

    【本次总结完毕】  2018.1.20

     

     

     

     

     

     

     

     

 

 

 

 

 

   

 

Java学习总结(7)——(File类,IO流,(缓冲流,转换流等),Properties类)

标签:更新   rri   eclips   delete   写入   show   out   boost   def   

原文地址:http://blog.51cto.com/13501268/2063431

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!