Day20

10 创建java文件列表
11 Properties简述
12 Properties存取
13 Properties存取配置文件
14 Properties练习
15 PrintWriter
16 合并流
17 切割文件

10 创建java文件列表

练习:
将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,
建立一个java文件列表的文件。

思路:
1.对指定的目录进行递归
2.获取递归过程所有的java文件的路径
3.将这些路径存储到集合中
4.将集合中的数据存储到一个文件中。

 import java.io.*;
import java.util.*;
public class JavaFileList
{
public static void main(String[] args) throws IOException
{
File dir=new File("d:\\abc");
List<File> list=new ArrayList<File>();
fileToList(dir,list);
File file=new File(dir,"javafile.txt");
writeToFile(list,file.toString()); }
public static void fileToList(File dir,List<File> list)
{
File[] files=dir.listFiles(); for(File file:files)
{
if(file.isDirectory())
fileToList(file,list);
else
{
if(file.getName().endsWith(".java"))
list.add(file);
}
}
}
public static void writeToFile(List<File> list,String javaListFile)throws IOException
{
BufferedWriter bufw=null;
try
{
bufw=new BufferedWriter(new FileWriter(javaListFile));
for(File f:list)
{
String path=f.getAbsolutePath();
bufw.write(path);
bufw.newLine();
bufw.flush();
} }
catch (IOException e)
{
throw e;
}
finally
{
try
{
if(bufw!=null)
bufw.close();
}
catch (IOException ie)
{
throw ie;
}
}
}
}

11 Properties简述

Properties是hashtable的子类。
也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串,
是集合和IO技术相结合的集合容器。
该对象的特点,可以用于键值对形式的配置文件

配置文件:就是在用户登录电脑时,或是用户在使用软件时,软件系统为用户所要加载所需环境的设置和文件的集合。

它包括所有用户专用的配置设置,如程序项目、屏幕颜色、网络连接、打印机连接、鼠标设置及窗口的大小和位置等。

12 Properties存取

String getProperty(String key):用指定的键在此属性类表中搜索属性。

Object setProperty(String key,String value):调用Hashtable的方法put.

Set<String> stringPropertyNames():返回此属性类表中的键集。

 import java.util.*;
public class PropertiesDemo
{
public static void main(String[] args)
{
setAndGet(); }
public static void setAndGet()
{
Properties prop=new Properties(); prop.setProperty("Tina","22");
prop.setProperty("Jack","21");
prop.setProperty("Marry","20"); String value=prop.getProperty("Jack");
System.out.println(value); Set<String> names=prop.stringPropertyNames();
for(String s:names)
{
System.out.println(s+":"+prop.getProperty(s));
}
}
}

13 Properties存取配置文件

如何将流中的数据存储到集合中
想要将info.txt中键值数据存到集合中进行操作
1.用一个流和info.txt文件相关联。
2.读取一行数据,将该行数据用“=”进行分割,并且存入Properties数组中。

Properties类在加载数据时,需要数据有固定的格式,通常是键=值。

 import java.util.*;
import java.io.*;
public class PropertiesDemo_2
{
public static void main(String[] args)throws IOException
{
method_1();
//loadDemo();
}
public static void method_1()throws IOException
{
BufferedReader bufr=new BufferedReader(new FileReader("info.txt"));
String line=null;
Properties prop=new Properties();
while((line=bufr.readLine())!=null)
{
String[] arr=line.split("="); prop.setProperty(arr[0],arr[1]);
}
System.out.println(prop);
bufr.close();
}
//load和store方法的使用
public static void loadDemo()throws IOException
{
Properties prop=new Properties();
FileInputStream fis=new FileInputStream("info.txt"); //将流中的数据加载进集合
prop.load(fis);
//改变集合内容
prop.setProperty("Tina","16");
FileOutputStream fos=new FileOutputStream("info.txt");
//改变文件内容,使用store方法
prop.store(fos,"hahaha~~~"); System.out.println(prop);
fis.close();
fos.close(); } }

14 Properties练习

用于记录应用程序运行次数,
如果使用次数已到,那么给出注册提示。

很容易想到的是:计数器
可是该计数器定义在程序中,随着程序的运行而在内存中存在,并自行自增,
可是随着该应用程序的退出,该计数器也在内存中消失了。

下一次启动该程序,又会重新从0开始计数,
这样不是我们想要的。
程序即使结束,该计数器的值也应该存在。
下次程序启动会在加载该计数器的并加1后重新存储起来。

所以要建立一个配置文件,用于记录该软件的使用次数。

该配置文件使用键值对的形式,这样便于阅读和操作数据。
键值对数据是map集合,
数据是以文件形式存储,使用io技术。
那么map+io-->properties

配置文件可以实现应用程序数据的共享。

具体实现代码如下:

 import java.io.*;
import java.util.*;
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++;
//改变Properties表中的键值
prop.setProperty("time",count+""); FileOutputStream fos=new FileOutputStream(file);
//将Properties表中的键和元素对写入输出流
prop.store(fos,""); //关闭输入输出流
fos.close();
fis.close(); }
}

运行情况:

运行第六次时,控制台的显示:

您好,使用次数已到,请注册后再使用!

count.ini文件的内容:

#
#Wed Jan 13 16:33:13 CST 2016
time=5

15 PrintWriter

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

字节打印流:
PrintStream
构造函数可以接受的参数类型:
1.File对象 File
2.字符串路径 String
3.字节输出流 OutputStream

字符打印流:
PrintWriter
构造函数可以接受的参数类型:
1.File对象 File
2.字符串路径 String
3.字节输出流 OutputStream
4.字符输出流 Writer

 import java.io.*;
public class PrintDemo
{
public static void main(String[] args) throws IOException
{
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//自动刷新
//PrintWriter out=new PrintWriter(System.out,true);
PrintWriter out=new PrintWriter(new FileWriter("g.txt"),true); String line=null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
//带换行的打印
out.println(line.toUpperCase());
//out.flush(); }
out.close();
bufr.close(); }
}

16 合并流

SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,

直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。

可以用来合并文件。

 import java.io.*;
import java.util.*;
public class SequenceInputStreamDemo
{
public static void main(String[] args) throws IOException
{
Vector<FileInputStream> v=new Vector<FileInputStream>(); v.add(new FileInputStream("d:\\abc\\1.txt"));
v.add(new FileInputStream("d:\\abc\\2.txt"));
v.add(new FileInputStream("d:\\abc\\3.txt")); Enumeration<FileInputStream> en=v.elements(); SequenceInputStream sis=new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream("d:\\abc\\4.txt"); byte[] buf=new byte[1024]; int len=0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close(); }
}

17 切割文件

文件可以合并,同样也可以切割。当网站的一次上传大小有一定限制时,需要上传较大文件时,就需要用到文件的切割。

 import java.io.*;
//切割文件
public class SplitFile
{
public static void main(String[] args)throws IOException
{
splitFile(); }
public static void splitFile()throws IOException
{
FileInputStream fis=new FileInputStream("d:\\abc\\bird.jpg");
FileOutputStream fos=null; byte[] buf=new byte[1024];
int len=0;
int count =1;
while((len=fis.read(buf))!=-1)
{
fos=new FileOutputStream("d:\\abc\\"+(count++)+".part");
fos.write(buf,0,len);
fos.close(); }
fis.close(); }
}

IO流05--毕向东JAVA基础教程视频学习笔记的更多相关文章

  1. 多线程--毕向东java基础教程视频学习笔记

    目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...

  2. IO流01--毕向东JAVA基础教程视频学习笔记

    提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...

  3. IO流03--毕向东JAVA基础教程视频学习笔记

    提要 16 读取转换流17 写入转换流18 流操作规律-119 流操作规律-220 改变标准输入输出设备21 异常的日志信息22 系统信息 16 读取转换流 字符流体系中的InputStreamRea ...

  4. 网络编程2--毕向东java基础教程视频学习笔记

    Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...

  5. IO流04--毕向东JAVA基础教程视频学习笔记

    Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...

  6. IO流02--毕向东JAVA基础教程视频学习笔记

    提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-rea ...

  7. 网络编程3--毕向东java基础教程视频学习笔记

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

  8. 网络编程1--毕向东java基础教程视频学习笔记

    目录: 01 网络编程概述1 02 网络编程概述2 03网络编程 网络模型 04网络编程 IP地址 05网络编程 TCP和UDP 06网络编程 Socket 07网络编程 UDP发送端 01 网络编程 ...

  9. 集合3--毕向东java基础教程视频学习笔记

    Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...

随机推荐

  1. C#编程总结(七)数据加密——附源码

    C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容 ...

  2. LeetCode122:Best Time to Buy and Sell Stock II

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  3. 泛函编程(32)-泛函IO:IO Monad

    由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码( ...

  4. php高版本不再使用mysql_connect()来连接数据库

    想用php生成一个mysql数据字典导出来,用到下面代码会 $mysql_conn = mysql_connect ( "$dbserver", "$dbusername ...

  5. jstl标签

    为什么提出jstl标签? Jsp中包含html标签+java片段+jsp片段使得jsp页面比较乱.提出:能不能把<% %>java片段用标签替换 jsp页面更简洁 <!-- 引入js ...

  6. 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?

    手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上 ...

  7. 20款美化网站的 jQuery Lightbox 灯箱插件

    jQuery Lightbox 灯箱插件可以让你为您的网站和应用程序展示优雅的图像,视频 和其它内容(使用模式窗口).如果你是一个开发人员,你必须拥有 jQuery 灯箱插件集合,因为有一部分的客户会 ...

  8. 小数5.2500四舍五入保留1位小数的java算法之一

    BigDecimal bd = new BigDecimal(5.2500); BigDecimal a = bd.setScale(1, BigDecimal.ROUND_HALF_UP); dou ...

  9. CRM 2013 中业务流程的

    在CRM 2013 中有一个新功能就业务流程,它可以引导用户在既定好的业务规则下操作表单,实现业务之前的衔接.并且让衔接可以视化,能清楚定位到当前的流程在那个节点.我们在配置视图的时候可以将流程阶段放 ...

  10. PCAP过滤器

    PCAP-FILTER NAME pcap-filter-packet filter syntax DESCRIPTION pcap_compile() 将字符串编译成过滤器程序. 合理的过滤器程序可 ...