properties load sort get set
/**
* properties 集合继承了hashtable
* 类 表示一个持久的属性集 可保存在流中或从流中加载
* 此集合是唯一一个和IO流相结合的集合
* sort把集合中的临时数据 持久化到硬盘中存储
* load
*
* 键值默认是字符串 使用集合来保存数据
* properties 集合 双列集合
*/
public class Properties {
public static void main(String[] args)throws IOException {
//show01();
//sort();
show03();
}
private static void show03()throws IOException{
java.util.Properties properties =new java.util.Properties();
//使用setProperties 往集合中添加数据
properties.setProperty("周一","162");
properties.setProperty("周二","162");
properties.setProperty("周三","162");
//读取保存键值对的文件 load方法
properties.load(new FileReader("F:\\ideawork\\a.txt"));
//遍历集合
Set set = properties.stringPropertyNames();
for (String s : set) {
String property = properties.getProperty(s);
System.out.println(s+"="+property);
}
}
private static void sort()throws IOException {
//in thread "main" java.io.FileNotFoundException: C:\ideawork\properties.txt (系统找不到指定的路径。)
java.util.Properties properties =new java.util.Properties();
//使用setProperties 往集合中添加数据
properties.setProperty("周一","162");
properties.setProperty("周二","162");
properties.setProperty("周三","162");
//创建字节输出流 字符输出流对象 构造方法中绑定要输出的目的地
FileWriter fileWriter =new FileWriter("F:\\ideawork\\a.txt");
//properties集合中store方法 把集合中的临时数据 持久化存储到硬盘中存储
properties.store(fileWriter,"save");
fileWriter.close();
}
/**
* 使用集合 存储数据 遍历 取出
* properties集合 默认都是字符串 操作字符串特有方法 setproperties
* getProperties key-value(相当于map集合中的get)
*/
private static void show01() {
//创建集合对象
//Properties properties = new Properties();注意要是工具类
java.util.Properties properties =new java.util.Properties();
//使用setProperties 往集合中添加数据
properties.setProperty("周一","162");
properties.setProperty("周二","162");
properties.setProperty("周三","162");
//System.out.println(properties);
//键值取出 存储到set集合中
Set set = properties.stringPropertyNames();
for (String s : set) {
//String property = properties.getProperty(s);
//System.out.println(property);
// System.out.println(s);
}
}
}
缓冲流 字节缓冲输出 字节缓冲输入
字符缓冲输出输入 readline (map集合的地方有一个错误 不知道为什么对报异常 但是debug的是有是有值得)
/**
* 文本内容进行排序
* 分析 应该如何进行分析 没有头绪
* 首先文本应该是有段落的吧都标有序号
* 可以创建一个hashMap集合对象 存储序号 和文本
* 创建readline 有关的 字符流输入 因为可以逐行读取 用到缓冲区最好 提高速率
* hashmap自动排序
* 每一个键值对 拼接为一个文本行 写入到文件中 释放资源
*/
public class Map {
public static void main(String[] args)throws IOException {
HashMap hashMap =new HashMap<>();
BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("F:\\ideawork\\a,txt"));
BufferedReader bufferedReader =new BufferedReader(new FileReader("F:\\ideawork\\a.txt"));
String line;
while ((line=bufferedReader.readLine())!=null){
//对原来的文本进行切割 想一下 用什么方式可以拿到
String[] arr = line.split("\\.");
//把切割好的文本放在hashmap集合中
/* hashMap.get(split);*/
//出现了异常ArrayIndexOutOfBoundsException: 10
//序号是有序的会自动排序 但是为什么会有错 debug都可以正常
hashMap.put(arr[0],arr[1]);
}
//遍历
for (String key:hashMap.keySet()){
String value = hashMap.get(key);
line=key+"->"+value;
bufferedWriter.write(line);
bufferedWriter.newLine();
System.out.println(key+"-->"+value);
//System.out.println(key);
}
bufferedWriter.close();
bufferedReader.close();
}
}
转换流
import java.io.*;
/**
* 转换流
* 字符编码(编码 解码)与二进制数之间的对应规则 字符集
* 指定了编码 字符集也会指定
* 字符集
* ascii码表 最基本 正数128 iso-8859-1 兼容ascii码表 GB2312 简体中文码表 两个字节存储一个中文
* GBK双字节编码 繁体 日韩 常用的编码 GB18030最新的中文码表 多字节编码
* 默认的码表GBK
* Unicode字符集 标准万国码 UTF-8采用的优先编码 web开发 idea默认UTF-8 三个字节存储一个中文
*/
public class Turn {
public static void main(String[] args)throws IOException {
/**
* filereader 读取idea 默认编码UTF-8的文件
* FileReader 读取系统的默认编码GBK
* 硬盘文件 以字节存储
*/
FileReader fileReader =new FileReader("F:\\ideawork\\aaa.txt");
int len=0;
while ((len=fileReader.read())!=-1){
//System.out.println((char)len);// 乱码的信息
}
//fileReader.close();
//当我们新建文本时 就会有系统默认的编码是GBK FileReader 读到的信息就会乱码
//menthod();
//inputStream();
gbk();
}
/**
* GBK 中文码表 两个字节存储一个中文
* UTF-8 国际标准码表 三个字节存储一个中文 编码不一样 占用的大小不一样 (char)
* FileInputStream 字节输入流
*/
/**
* OutputStreamWriter 创建字符编码
* OutputStreamWriter 指定编码表的名称
*/
/* public static void menthod()throws IOException{
//创建指定字符集OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("F:\\ideawork\\aaa.txt"),"utf-8");
//不指定编码 也可以正常打印OutputStreamWriter outputStreamWriter1 = new OutputStreamWriter(new FileOutputStream("F:\\ideawork\\aaa.txt"));
//gbk 必须指定编码表 大小写都可以 outputStreamWriter.write("你是谁");
outputStreamWriter.close();// 打印的你是谁 outputStreamWriter1.write("你还好吗");
outputStreamWriter1.close();
}
*/
/**
* 默认字符集 指定字符集
* inputStream 字节输入流 用来读取文件中保存的字节
*
* GBK 编码格式的文件 需指定GBK格式的编码
*/
public static void inputStream()throws IOException{
//指定不指定编码格式都可以
InputStreamReader inputStreamReader =new InputStreamReader(new FileInputStream("F:\\ideawork\\aaa.txt"));
int len=0;
while ((len=inputStreamReader.read())!=-1){
System.out.println((char)len);//正确输出文字内容
}
inputStreamReader.close();
}
/**
* GBK 编码格式的文件 需指定GBK格式的编码
* 没有指定编码格式 就会出现乱码的情况 也不能指定UTF-8的编码格式
* @throws IOException
*/
public static void gbk()throws IOException{
//指定不指定编码格式都可以
InputStreamReader inputStreamReader =new InputStreamReader(new FileInputStream("F:\\ideawork\\dianbiao.txt"));
int len=0;
while ((len=inputStreamReader.read())!=-1){
System.out.println((char)len);//正确输出文字内容
}
inputStreamReader.close();
}
}
转换文件编码
public class Test {
public static void main(String[] args)throws IOException {
/**
* 练习 转换文件编码 将GBK 编码的文本 转换为UTF-8编码的文本文件
* 创建 读 GBK文本
* 创建写 字节输出流
*/
InputStreamReader gbk =new InputStreamReader(new FileInputStream("F:\\ideawork\\nihao.txt"),"gbk");
OutputStreamWriter outputStreamWriter =new OutputStreamWriter(new FileOutputStream("F:\\ideawork\\dianbiao.txt"),"utf-8");
//线读取文件
int len=0;
while ((len=gbk.read())!=-1){
System.out.println((char)len);
outputStreamWriter.write(len);
}
outputStreamWriter.close();
gbk.close();
}
}
序列化流
序列化的集合
打印流