您的位置:首页 > 职场人生

黑马程序员——Java学习笔记之⑤——“IO输入与输出”

2014-03-30 15:18 666 查看
----------- android培训java培训、期待与您交流! ------------

1、System 类中的方法和属性都是静态的,不能实例化。

out:标准输出,默认是控制台。

in:标准输入,默认是键盘。

2、Properties是Hashtable的子类,也就是Map集合的一个子类对象。那么可以通过map的方法取出该集合中的元素。该集合中存储的都是字符串,没有泛型定义。

Properties getProperties();
//获取所有的系统属性信息

setProperty(Key , Value);//在系统中自定义特有信息

getProperty( Key );//获取系统信息中键为Key的属性的值

示例如下:



3、Runtime类的分析思路:

①该类中并没有提供构造函数,说明不可以new对象。

②发现该类中还有非静态方法,说明该类肯定会提供了方法获取本类对象,而且该方法是静态的,并且返回值是本类类型。

③查阅api文档得知 该方法是static Runtime getRuntime();//获取JVM当前运行时环境

④由以上特点可以看出该类使用了单例设计模式。

4、Runtime.getRuntime().exec( ); 启动一个进程, 通过destroy()来杀掉进程。应用实例如下:



5、Date类:通过Date() 构造方法来创建Date对象,通过toString(); 方法将Date对象转换为字符串形式。通过SimpleDateFormat("y年M月d日 E H:m:s");方法将日期输出模式封装到SimpleDateFormat对象中。然后调用SimpleDateFormat对象的format(); 方法来格式化Date对象。

示例如下:



6、Math类中的常用方法:

abs();方法返回指定数据的绝对值

double ceil();方法返回大于指定数据的double型最小整数

double floor();方法返回小于指定数据的double型最大整数

long round(); 四舍五入

double pow(double a, double b); 返回a的b次幂

random r = double random();返回大于0.0,小于1.0的double型数据。可用此函数生成一些范围内的数,

例如:double d8 = Math.random()*10,生成0~10之间的随机数(包括0,不包括10),

int d9 = (int)(Math.random()*10+1);//生成1~10之间的整数,包括10。

r.nextInt();//生成下一个伪随机数。

r.nextInt(int i);
//返回0(包括0)到指定数i(不包括i)之间的随机整数。

下面为生成5个0~100之间不同的随机数的实例:



7、IO流:

按流方向:分为输入流和输出流

按操作数据:分为字节流(抽象基类:InputStream、OutputStream)和字符流(抽象基类:Reader、Writer)(里边融合了编码表)

8、编码表

ASCII:美国标准信息交换码

GB2312:包含8000+汉字----->GBK:包含20000+汉字

Unicode:国际通用的码表(包含甚广)--->UTF-8:优化了Unicode表,优化了存储空间。

9、IO异常处理方式:申明流对象;try{初始化流}catch(IOException e){e.toString()}finally{关闭流}。 在关闭流时,要对每个流对象分别进行判断和关闭。

10、FileWriter中对已有文件的续写:new FileWriter("file.*",bollean ture); 不覆盖文件,并在已有文件的末尾处进行数据的续写。

FileReader中调用读取流对象的read方法。一次读取一个字符,并且会自动往下读,每次读完一个字符都将这个字符作为返回值返回。如果读到流的末尾,则返回-1。

读取硬盘上文件的代码示例:



11、字符流的缓冲区:对应的类为 BufferedWriter、BufferedReader。缓冲区的出现是为了提高流的操作效率。这里应用到了装饰设计模式。注意:该缓冲区中提供了一个跨平台的换行符:newline();

使用方法:只要将需要被提高效率的流对象作为参数提供给缓冲区的构造函数即可。另外该缓冲区还提供了一个方法readline();,方便与对文本数据的获取。当返回null时,表示已读到了文件末尾。需要注意的是:readline() 方法返回的时候,只返回有效字符数据,不会返回换行符之类的终止符。

示例:BufferedWriter bufw = new BufferedWriter( new FileWriter("e:\\BufferedDemo.txt") ); 注意:每写一次要使用flush()函数刷新缓冲区,将缓冲区的数据写入到目标文件中去。最后关闭流之前,也会默认进行一次flush()刷新缓冲区的动作。

12、装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能。那么自定义的该类就成为装饰类。

(装饰类的具体细节见“设计模式”总结的学习日记)

13、装饰类通常会通过构造函数接收要被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。

14、装饰与继承:装饰模式比继承要灵活,避免了继承体系臃肿,而且降低了类与类之间的关系。装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常是都属于一个体系中的。继承与装饰的对比实例如下:



15、LineNumberReader是一个带行号的字符输入流,可以通过getLineNumber(); 获取当前读取到的行号,通过setLineNumber( int ); 来设置开始计数的行号。

16、InputStreamReader(InputStream in)(OutputStreamWriter(OutputStream out) ):字节流转向字符流的桥梁。通常涉及到字符编码转换时,需要用到转换流。例如:当要将键盘录入的字节流数据变成字符流数据,并打印在控制台上的时候就需要将字节流转换为字符流,具体应用示例如下:



17、从键盘录入的常规写法:BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

输出到控制台的常规写法:BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

18、流对象的基本操作规律:

①.明确源(输入流)和目的(输出流);

输入流:InputStream,Reader

输出流:OutputStream,Writer

②明确操作的数据是否是纯文本。

是:用字符流

不是:字节流

③体系明确后,再明确要使用哪个具体的对象,通过设备进行区分:

源设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台

19、System.setIn(InputStream in); 改变标准输入

System.setOut(OutputStream out); 改变标准输出

20、File类:对文件和目录路径名的抽象表示形式,用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。(流只能操作数据。)

File对象可以作为参数传递给流的构造函数

21、File对象的常用方法:

①创建

boolean createNewFile(); 在指定位置创建文件,如果该文件已经存在,则不创建,返回false。(这和输出流不一样,输出流对象一建立就创建文件,而且如果文件已存在,则会覆盖。)如果父目录不存在则发生异常。

boolean mkdir(); 创建此抽象路径名指定的单级目录。

boolean mkdirs(); 创建此抽象路径名指定的多级目录。

②删除

boolean delete(); 删除失败返回false。

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

③判断

boolean canExecute(); 判断程序是否能执行。如果文件不存在返回false。

boolean canRead(); 判断文件是否可读。

boolean canWrite(); 判断文件是否可写。

int compareTo(File pathname); 按照字符顺序比较两个抽象路径名。

boolean exists(); 判断指定文件或路径是否存在。

boolean isDirectory(); 判断路径名表示的文件是否是目录

boolean isFile(); 判断路径名表示的文件是否是标准文件

boolean isHidden(); 判断是否是隐藏文件

boolean isAbsolutePath(); 判断是否为绝对路径

④获取信息

String getName();

String getPath(); 返回相对路径

String getParent(); 返回绝对路径中的父目录,如果封装File时没有明确指定父目录,则返回null。

String getAbsolutePath(); 返回绝对路径

long lastModified(); 返回指定文件最后一次被修改的时间

long length(); 返回文件长度,即文件大小

(File oldfile).renameTo(File destfile);重命名指定路径下的文件。相当于剪切。如果要被剪切的文件不存在,返回false;如果剪切完的文件在指定目录已存在,返回false。

File[] listRoots();//获取所有根目录。

String[] list();
//获取指定File路径下的所有文件和文件夹(注:调用list方法的File对象必须是封装了一个目录,而且该目录必须存在。)在列出指定File路径下所有文件时,还可定义匿名内部类FilenameFilter,对文件名进行过滤,得到需要的文件。示例如下:



File[] listFiles();获取指定目录下的所有文件。

22、打印流:提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流:PrintWriter构造函数可以接收的参数类型(还可以设置第二个boolean参数,用来设置是否让输出流自动刷新)

①file对象File :(File file)、(File file, String csn(指定字符集))

②字节输出流OutputStream : (OutputStream out)

③字符串路径

④字符输出流Writer

字符打印流:PrintSteam构造函数可以接收的参数类型

①file对象File :(File file)、(File file, String csn(指定字符集))

②字节输出流OutputStream : (OutputStream out)

③字符串路径

----------- android培训java培训、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: