黑马程序员-基础知识梳理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,则 printlnprintfformat 方法将刷新输出缓冲区

SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 

/*
 * RandomAccessFile
 * 该类不算是IO体系中的子类
 * 而是直接继承自Object
 * 但是它是IO包中的成员,因为他具备读写功能
 * 内部封装了一个数组,而通过指针对数组元素进行操作
 * 可以通过getFilePointer获取指针位置
 * 同时可以通过seek改变指针的位置
 *
 * 其实完成读写的原理就是内部封装了字节输入流和输出流
 *
 * 通过构造函数可以看出,该类只能操作文件。
 * 而且操作文件还有模式:只读r,读写rw等。
 * 如果模式为只读r,不会创建文件。会去读取一个已存在的文件,如果该文件不存在则会出现异常。
 * 如果模式为rw的话,那么要操作的文件不存在,会自动创建,如果存在不会覆盖
 */
 * 用于操作字节数组的流对象
 * ByteArrayInputStream :在构造的时候,需要接受数据源,而且数据源是一个字节数组
 *
 * ByteArrayOutputStream 在构造时,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组
 * 这就是数据目的地
 * 因为这两个流对象都操作的数组,并没有使用系统资源。
 * 所以,不用进行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培训 、期待与您交流! ----------  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值