黑马程序员-基础知识梳理8
2013-08-06 14:06
267 查看
------- android培训、java培训、期待与您交流!
----------
/*
* File常见方法
* 1.创建
* boolean CreateNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false
* 和输出流不一样,输出流对象一建立就创建文件。而且文件已经存在,会覆
*
* boolean mkdir();创建文件夹
* boolean mkdirs();创建多级文件夹
*
* 2.删除
* boolean delete();删除失败返回false,如果文件正在被使用,则删除不了,返回false
* void deleteOnExit();在程序退出时删除指定文件
*
* 3.判断
* boolean exists(): 文件是否存在
* isFile();
* isDirectory();
* isHidden();
* isAbsolutePath();
* 4.获取信息
* getName();
* getPath();
* getParent
* getAbsolutePath()
* long lastMeodified()
* long lenth()
*/
System.out.println("parent:"+f.getParent());//该方法返回的是绝对路径的父目录。如果获取的相对路径,返回null。
//如果相对路径中有上一层目录,那么 该 目录就是返回结果
File f = new File("file.txt");
//记住,在判断文件是否是文件或者是目录时,必须要先判断该文件对象封装的内容是否存在,通过exists判断
'String[] names = f.list();//调用list方法的file对象必须是封 装了一个目录,该目录还必须存在
* 列出指定目录下文件或者文件夹,包含子目录的内容
* 也就是列出指定目录下的内容
*
* 因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可
* 在列出过程中出现的还是目录的话,还可以再次调用本功能
* 也就是函数自身调用自身
*
* 这种表现形式,或者编程手法称为递归
*
* 递归要注意:
* 1.限定条件
*
* 2.要注意递归的次数,尽量避免内存溢出
*/
/*
* 删除一个带内容的目录
* 删除原理:
* 在windows中,删除目录从里面往外删除的
*
* 需要用到递归
/*
* 练习:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中
* 建立一个java文件列表文件
*
* 思路
* 1,对指定目录进行递归
* 2,获取递归过程所以的java文件的路径
* 3,将这些路径存储到集合中
* 4, 将集合中的数据写入到一个文件中
*/
/*
* Properties 是hashtable的子类
* 也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串
*
* 是集合中和IO技术结合的集合容器
*
* 该对象的特点:可以用于键值对形式的配置文件
*
* 那么在加载数据时,需要数据有固定格式,键=值
*/
* 用于记录应用程序运行次数
* 如果使用次数已到,那么给出注册提示
* 很容易想到的是:计数器
* 可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行了自增
* 可是随着该应用程序的退出,该计数器也在内存中消失了
*
* 下一次再启动该程序,又重新开始从0计数
* 这样不是我们想要的。
*
* 程序即使结束,该计数器的值也 存在
* 下一次程序启动会先加载该计数器的值,并+1后再重新存储起来
*
* 所以要建立一个配置文件,用于记录该软件的使用次数。
* 该配置文件使用键值对的形式,这样便于阅读数据,并操作数据。
*
* 键值对数据是map集合
* 数据是以文件形式存储,使用io技术,那么map+io---->properties
*
* 配置文件可以实现应用程序的共享
*
*
*/
public class RunCount {
public static void main(String[] args) throws IOException
{
Properties prop = new Properties();
File file =new File("count.ini");
if(!file.exists()){
file.createNewFile();
}
FileInputStream fis = new FileInputStream(file);
prop.load(fis);
int count =0 ;
String value = prop.getProperty("time");
if(value!=null){
count = Integer.parseInt(value);
if(count>=5)
{
System.out.println("您好,使用次数已到,给钱");
return ;
}
}
count++;
System.out.println(count);
prop.setProperty("time", count+"");
FileOutputStream fos = new FileOutputStream(file);
prop.store(fos,"");
fos.close();
fis.close();
}
}
/*
* 打印流:
* 该流提供了打印方法,可以将各种数据类型的数据都原样打印
*
* 字节打印流:
* PrintStream
* 构造函数可以接受的参数类型:
* 1。file对象,file
* 2.字符串路径 String
* 3.字节输出流。OutputStream
*
* 字符打印流
* PrintWriter
* 构造函数可以接受的参数类型:
* 1.file对象,file
* 2.字符串路径 String
* 3.字节输出流。OutputStream
* 4.字符数出流。Writer
*/
public PrintWriter(Writer out, boolean autoFlush)
创建新 PrintWriter。
参数:
format 方法将刷新输出缓冲区
SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
/*
* RandomAccessFile
* 该类不算是IO体系中的子类
* 而是直接继承自Object
* 但是它是IO包中的成员,因为他具备读写功能
* 内部封装了一个数组,而通过指针对数组元素进行操作
* 可以通过getFilePointer获取指针位置
* 同时可以通过seek改变指针的位置
*
* 其实完成读写的原理就是内部封装了字节输入流和输出流
*
* 通过构造函数可以看出,该类只能操作文件。
* 而且操作文件还有模式:只读r,读写rw等。
* 如果模式为只读r,不会创建文件。会去读取一个已存在的文件,如果该文件不存在则会出现异常。
* 如果模式为rw的话,那么要操作的文件不存在,会自动创建,如果存在不会覆盖
*/
* 用于操作字节数组的流对象
* ByteArrayInputStream :在构造的时候,需要接受数据源,而且数据源是一个字节数组
*
* ByteArrayOutputStream 在构造时,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组
* 这就是数据目的地
*
4000
因为这两个流对象都操作的数组,并没有使用系统资源。
* 所以,不用进行close关闭
*
* 在流操作规律讲解时:
* 源设备:
* 键盘system.in,硬盘FileStream,内存ArrayStream
*
* 目的设备
* 控制台System.out ,硬盘FileStream,内存ArrayStream
*
* 用流的读写思想操作数组
*/
*
* 编码:字符串变字节数组
*
* 解码:字节数组变成字符串
* String -->byte[]; str.getBytes(charsetName);
*
* byte[] -->String: new String(byte[]);
*/
byte[] b1 = s.getBytes("GBK");
String s1 = new String(b1,"utf-8");
------- android培训、java培训、期待与您交流!
----------
----------
/*
* File常见方法
* 1.创建
* boolean CreateNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false
* 和输出流不一样,输出流对象一建立就创建文件。而且文件已经存在,会覆
*
* boolean mkdir();创建文件夹
* boolean mkdirs();创建多级文件夹
*
* 2.删除
* boolean delete();删除失败返回false,如果文件正在被使用,则删除不了,返回false
* void deleteOnExit();在程序退出时删除指定文件
*
* 3.判断
* boolean exists(): 文件是否存在
* isFile();
* isDirectory();
* isHidden();
* isAbsolutePath();
* 4.获取信息
* getName();
* getPath();
* getParent
* getAbsolutePath()
* long lastMeodified()
* long lenth()
*/
System.out.println("parent:"+f.getParent());//该方法返回的是绝对路径的父目录。如果获取的相对路径,返回null。
//如果相对路径中有上一层目录,那么 该 目录就是返回结果
File f = new File("file.txt");
//记住,在判断文件是否是文件或者是目录时,必须要先判断该文件对象封装的内容是否存在,通过exists判断
'String[] names = f.list();//调用list方法的file对象必须是封 装了一个目录,该目录还必须存在
* 列出指定目录下文件或者文件夹,包含子目录的内容
* 也就是列出指定目录下的内容
*
* 因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可
* 在列出过程中出现的还是目录的话,还可以再次调用本功能
* 也就是函数自身调用自身
*
* 这种表现形式,或者编程手法称为递归
*
* 递归要注意:
* 1.限定条件
*
* 2.要注意递归的次数,尽量避免内存溢出
*/
/*
* 删除一个带内容的目录
* 删除原理:
* 在windows中,删除目录从里面往外删除的
*
* 需要用到递归
/*
* 练习:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中
* 建立一个java文件列表文件
*
* 思路
* 1,对指定目录进行递归
* 2,获取递归过程所以的java文件的路径
* 3,将这些路径存储到集合中
* 4, 将集合中的数据写入到一个文件中
*/
/*
* Properties 是hashtable的子类
* 也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串
*
* 是集合中和IO技术结合的集合容器
*
* 该对象的特点:可以用于键值对形式的配置文件
*
* 那么在加载数据时,需要数据有固定格式,键=值
*/
* 用于记录应用程序运行次数
* 如果使用次数已到,那么给出注册提示
* 很容易想到的是:计数器
* 可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行了自增
* 可是随着该应用程序的退出,该计数器也在内存中消失了
*
* 下一次再启动该程序,又重新开始从0计数
* 这样不是我们想要的。
*
* 程序即使结束,该计数器的值也 存在
* 下一次程序启动会先加载该计数器的值,并+1后再重新存储起来
*
* 所以要建立一个配置文件,用于记录该软件的使用次数。
* 该配置文件使用键值对的形式,这样便于阅读数据,并操作数据。
*
* 键值对数据是map集合
* 数据是以文件形式存储,使用io技术,那么map+io---->properties
*
* 配置文件可以实现应用程序的共享
*
*
*/
public class RunCount {
public static void main(String[] args) throws IOException
{
Properties prop = new Properties();
File file =new File("count.ini");
if(!file.exists()){
file.createNewFile();
}
FileInputStream fis = new FileInputStream(file);
prop.load(fis);
int count =0 ;
String value = prop.getProperty("time");
if(value!=null){
count = Integer.parseInt(value);
if(count>=5)
{
System.out.println("您好,使用次数已到,给钱");
return ;
}
}
count++;
System.out.println(count);
prop.setProperty("time", count+"");
FileOutputStream fos = new FileOutputStream(file);
prop.store(fos,"");
fos.close();
fis.close();
}
}
/*
* 打印流:
* 该流提供了打印方法,可以将各种数据类型的数据都原样打印
*
* 字节打印流:
* PrintStream
* 构造函数可以接受的参数类型:
* 1。file对象,file
* 2.字符串路径 String
* 3.字节输出流。OutputStream
*
* 字符打印流
* PrintWriter
* 构造函数可以接受的参数类型:
* 1.file对象,file
* 2.字符串路径 String
* 3.字节输出流。OutputStream
* 4.字符数出流。Writer
*/
public PrintWriter(Writer out, boolean autoFlush)
创建新 PrintWriter。
参数:
out- 字符输出流
autoFlush- boolean 变量;如果为 true,则 println、printf 或
format 方法将刷新输出缓冲区
SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
/*
* RandomAccessFile
* 该类不算是IO体系中的子类
* 而是直接继承自Object
* 但是它是IO包中的成员,因为他具备读写功能
* 内部封装了一个数组,而通过指针对数组元素进行操作
* 可以通过getFilePointer获取指针位置
* 同时可以通过seek改变指针的位置
*
* 其实完成读写的原理就是内部封装了字节输入流和输出流
*
* 通过构造函数可以看出,该类只能操作文件。
* 而且操作文件还有模式:只读r,读写rw等。
* 如果模式为只读r,不会创建文件。会去读取一个已存在的文件,如果该文件不存在则会出现异常。
* 如果模式为rw的话,那么要操作的文件不存在,会自动创建,如果存在不会覆盖
*/
* 用于操作字节数组的流对象
* ByteArrayInputStream :在构造的时候,需要接受数据源,而且数据源是一个字节数组
*
* ByteArrayOutputStream 在构造时,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组
* 这就是数据目的地
*
4000
因为这两个流对象都操作的数组,并没有使用系统资源。
* 所以,不用进行close关闭
*
* 在流操作规律讲解时:
* 源设备:
* 键盘system.in,硬盘FileStream,内存ArrayStream
*
* 目的设备
* 控制台System.out ,硬盘FileStream,内存ArrayStream
*
* 用流的读写思想操作数组
*/
*
* 编码:字符串变字节数组
*
* 解码:字节数组变成字符串
* String -->byte[]; str.getBytes(charsetName);
*
* byte[] -->String: new String(byte[]);
*/
byte[] b1 = s.getBytes("GBK");
String s1 = new String(b1,"utf-8");
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员-基础知识梳理3
- 黑马程序员-基础知识梳理5
- 黑马程序员-基础知识梳理7
- 黑马程序员-基础知识梳理2
- 黑马程序员——java基础(IO部分知识梳理)上
- 黑马程序员--c#基础知识梳理
- 黑马程序员——java基础(IO部分知识梳理)下
- 黑马程序员-基础知识梳理4
- javascript基础知识梳理-表达式和操作符
- [黑马程序员] _C#基础知识小结
- 黑马程序员---java基础知识(四):多线程
- 黑马程序员 java基础知识加强---枚举
- Java基础知识梳理
- 黑马程序员--Java基础知识总结
- 黑马程序员-内存管理基础知识
- 黑马程序员学习log第一篇基础知识:java概述及基础语法总结
- 黑马程序员——Java基础知识——数组
- C#基础知识梳理之垃圾回收机制
- 黑马程序员-------.net基础知识一
- 黑马程序员_java基础知识(5)枚举的简单理解