java加强--IO流

IO流总结

/**
 * 流操作的基本规律;
 * 最痛苦的就是流对象有很多,不知道使用哪一个
 *
 * 1.明确源和目的
 *   源:输入流 InputStream Reader
 *   目的:输出流 OutputStream Writer
 * 2.操作的数据是否是纯文本
 *   是:字符流
 *   不是:字节流
 * 3.当体系明确后,在明确要使用哪个具体的对象
 *   通过设备来进行区分
 *   源设备:内存,硬盘,键盘
 *   目的设备:内存,硬盘,控制台
 *
 * 转换流什么时间使用?
 * 字符和字节之间的桥梁,通常涉及到字符编码转换时需要用到转换流
 */

 字符流
public class Test1 {
 public static void main(String[] args) throws IOException {
  // 键盘的最常见写法
  BufferedReader bfr = new BufferedReader(
    new InputStreamReader(System.in));

  BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("aaa.txt")));

  String s = null;
  while ((s = bfr.readLine()) != null) {
   if ("over".equals(s))
    break;
   bfw.write(s);
   bfw.newLine();
   bfw.flush();//要刷新,将写在内存中的数据写入到目的地址中去。
   //这里也可以不写,等到关闭流时(close),程序会自动先执行一下刷新程序,但是最好写上flush,每次都刷新
  }
  bfw.close();
  // System.out.println(s);
 }
}

自定义时间的显示形式
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
String s=sdf.format(d);
System.out.println(s);


/**
 * File类常见方法:
 * 1,创建、
 *   boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
 *         和输出流不一样,输出流对象一建立创建文件,已有文件就会被覆盖。
 *   boolean mkdir();创建文件夹
 *   boolean mkdirs();创建多级文件夹
 * 2,删除。
 *   boolean delete();删除失败返回false.
 *   void deleteOnExit():在程序退出时删除指定文件。
 * 3,判断。
 *   boolean exists():文件是否存在(使用很频繁)
 *   isFile()是否是文件
 *   isDirectory()是否是文件夹
 *   isHidden();是否是隐藏
 *   isAbsolute()是否是绝对路径
 *   
 * 4,获取信息
 *   getName()
 *   getPath()
 *   getParent();获取绝对路径中的父目录
 *   getAbsolutePath()获取绝对路径
 *
 */


获取目录下的文件
有两种方式:
1:  File f=new File("c:\\");
 String names[]=f.list();//调用list方法的file对象必须是封装了一个目录。该目录还必须存在。
2:  File[] files=f.listFiles();
 for(File file:files)
 {
  file.getName();
 }
第一种方式只是获得到文件的名字,不能对文件进行操作。如果想对文件操作,那么必须用文件名new出该文件后在对文件进行操作。
第二种方式是获得文件对象,可以直接对获得的文件进行操作。(两种方式在不同的情况下使用不同的方法)

 

遍历指定文件夹下面的文件,并把class文件删除
public static void showDir(File dir)
{
 System.out.println(dir);
 File file[]=dir.listFiles();
 for(File f:file)
 {
  if(f.isDirectory())
   showDir(f);
  else{
   System.out.println(f);
   if(f.getName().endsWith(".class"))
    f.delete();
  }
 }
}

删除制定文件夹
public static void removeDir(File dir) {
 File files[] = dir.listFiles();
 for (File f : files) {
  if (f.isDirectory()) {
   removeDir(f);
  } else {
   System.out.println(f.getName() + "  file删除: " + f.delete());
  }
 }
 System.out.println(dir.getName() + "  dir删除: " + dir.delete());
}

 

/**
 * y用于记录应用程序运行的次数
 * 如果使用次数已到,那么给出注册提示
 *
 * 计数器,计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。
 * 可是随着该应用程序的退出,该计数器也在内存中消失了,下次再启动该程序
 * 又是从新开始从0计数。不是我们想要的。
 *
 * 所以要建立一个配置文件,用于记录该软件的使用次数。
 *
 * 该配置文件使用简直对的形式,这样便于阅读数据,并操作。
 *
 * 键值对数据时map集合。数据是以文件形式存储,是用Io技术。
 * 那么map+IO-->properties
 *
 * 配置文件可以实现应用程序数据的共享。
 *
 */

public static void runtime() throws Exception {
 File file = new File("d:\\time.txt");
 if (!file.exists()) {
  file.createNewFile();
 }
 InputStream is = new FileInputStream(file);
 OutputStream os = null;
 Properties ppt = new Properties();
 ppt.load(is);
 String value = ppt.getProperty("counttime");
 int count = 0;
 if (value != null) {
  count = Integer.parseInt(value);
  if (count >= 5) {
   System.out.println("使用次数已到,");
   System.exit(0);
  }
 }
 count++;
 ppt.setProperty("counttime", count + "");
 os = new FileOutputStream("d:\\time.txt");
 ppt.store(os, null);// 将此 Properties 表中的属性列表(键和元素对)写入输出流。
}

 

/**day21_01;
 * 用于操作字节数组的流对象。
 * ByteArrayInputStream:在构造的时候,需要接受数据源。而且数据源是一个字节数组。
 *
 * ByreArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。
 * 这就是数据目的地。
 *
 * 因为这两个流对象都操作的数组,并没有使用系统资源。
 * 所以,不用进行close关闭。
 *
 * 在流操作规律讲解时:
 * 源设备
 *   键盘System.in 硬盘FileStream 内存ArrayStream
 * 目的设备
 *   控制台System.out  硬盘FileStream  内存ArrayStream
 *
 * 用流的读写思想来操作数据。
 *
 */


编码与解码的问题
/**
 * 编码:字符串变成字节数组(默认编码是GBK)
 *
 * 解码:字节数组变成字符串
 *
 * String-->byte[]:str.getBytes(chersetName);
 * byte[]-->String:new String(byte[],chersetName);
 */

package day21_02encode;

import java.util.Arrays;

public class EmcodeDem02 {
 public static void main(String[] args) throws Exception {
  String s="你好";
  byte b1[]=s.getBytes("utf-8");//将字符串按照utf-8来编码(默认是GBK是4个字节)。按照utf-8的方式存是6个字节
  System.out.println(b1.length);
  System.out.println(Arrays.toString(b1));//将数组变成集合
  String s1=new String(b1,"ISO8859-1");//将字节数组按照ISO8859-1来解码(由于是按照utf-8来编码的所以解码后将会是乱码)
  System.out.println(s1);
  //对s1进行ISO8859-1编码。
  byte b2[]=s1.getBytes("ISO8859-1");//在对s1按照ISO8859—1来编码,这样获得就是之前用utf-8获得的字节码
  String s2=new String(b2,"UTF-8");//在用utf-8对字节码解码
  System.out.println(s2);
 }
}

 

 

外加一个递归删除指定文件下下面的所有.class文件。避免每次编译java文件后产生很多的.class文件而找不到java文件

public class FileDemo3 {
 public static void main(String[] args) {
  File dir=new File("E:\\java shiyan\\黑马_毕向东_java例子");
  showDir(dir);
 }
 public static void showDir(File dir)
 {
  System.out.println(dir);
  File file[]=dir.listFiles();
  for(File f:file)
  {
   if(f.isDirectory())
    showDir(f);
   else{
    System.out.println(f);
    if(f.getName().endsWith(".class"))
     f.delete();
   }
   
  }
 }

}

 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值