黑马程序员—IO流2
来源:互联网 发布:中东 知乎 编辑:程序博客网 时间:2024/05/29 13:38
------- android培训、java培训、期待与您交流! ----------
File类
1,用来将文件或者文件夹封装成对象
2,方便对文件与文件夹的属性信息进行操作。
3,File对象可以作为参数传递给流的构造函数。
File类常见方法:
1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。
boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。
boolean exists() :文件是否存在.
isFile():是否是一个标准文件。
isDirectory();是否是一个目录
isHidden();是否是一个隐藏文件。
isAbsolute();是否为绝对路径名
4,获取信息。
getName():获取路径名表示的文件或目录的名称。
getPath():将此抽象路径名转换为一个路径名字符串。
getParent():回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null
。
getAbsolutePath(): 返回此抽象路径名的绝对路径名字符串。
long lastModified() :返回此抽象路径名表示的文件最后一次被修改的时间。
long length() :返回由此抽象路径名表示的文件的长度。
递归
函数自己调用自己。
注意:递归时一定要明确结束条件。
应用场景:当某一功能要重复使用时。
实例:
public static void toBin(int num)
{
if(num>0)
{
toBin(num/2);//条件满足时,再次调用函数本身
System.out.println(num%2);
}
}
练习1:列出一个文件夹下所有的子文件夹以及子文件
import java.io.*;
class FileDemo3
{
public static void main(String[] args)
{
File dir = new File("d:\\java0217");
showDir(dir,0);
}
public static String getLevel(int level)
{
StringBuilder sb = new StringBuilder();
sb.append("|--");
for(int x=0;x<level;x++)
{
//sb.append("|--");
sb.insert(0," ");//去掉上一级目录的"|--"
}
return sb.toString();
}
public static void showDir(File dir,int level)
{
System.out.println(getLevel(level)+dir.getName());
level++;
File[] files = dir.listFiles();
for (int x=0;x<files.length ;x++ )
{
if(files[x].isDirectory())
showDir(files[x],level);
else
System.out.println(getLevel(level)+files[x]);
}
}
}
练习2:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
Properties
Properties是hashtable的子类。
也就是说它具备map集合的特,而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。
Object setProperty(String key, String value);设置元素
String getProperty(String key) ;获取元素
Set<String> stringPropertyNames() ;返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。
load();将流中的数据加载进集合。
store();将此 Properties 表中的属性列表(键和元素对)写入输出流。
练习:如何将流中的数据存储到Properties集合中。
/*
演示,如何将流中的数据存储到集合中。
将info.txt中键值数据存到集合中进行操作。
1,用一个流和info.txt文件关联。
2,读取一行数据,将该行数据用"="进行切割。
3,等号左边作为键,右边作为值存入到Properties集合中即可。
*/
public static void method()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]);
}
bufr.close();
System.out.println(prop);
}
打印流
该流提供了打印方法,可以将各种数据类型的数据都原样打印。
字节打印流:
PrintStream
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
字符打印流:
PrintWriter
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4,字符输出流,Writer。
序列流
SequenceInputStream对多个流进行合并。
SequenceInputStream
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,
直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
练习1:将3个文本文件合并成一个文本文件
练习2:将一个图片文件切割成3个碎片
操作对象
ObjectInputStream与ObjectOutputStream
被操作的对象需要实现Serializable(标记接口);
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
IO包中的其他类
操作基本数据类型
DataInputStream与DataOutputStream
操作字节数组
ByteArrayInputStream与ByteArrayOutputStream
操作字符数组
CharArrayReader与CharArrayWrite
操作字符串
StringReader 与 StringWriter
字符编码
1,字符流的出现为了方便操作字符。
2,更重要是的加入了编码转换。
3,通过子类转换流来完成。
InputStreamReader和OutputStreamWriter
4,在两个对象进行构造的时候可以加入字符集。
编码表的由来
计算机只能识别二进制数据,早期由来是电信号。
为了方便应用计算机,让它可以识别各个国家的文字。
就将各个国家的文字用数字来表示,并一一对应,形成一张表。
这就是编码表。
常见的编码表
SCII:美国标准信息交换码。
用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表
用一个字节的8位表示。
GB2312:中国的中文编码表。
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
Unicode:国际标准码,融合了多种文字。
所有文字都用两个字节来表示,Java语言使用的就是unicode
UTF-8:最多用三个字节来表示一个字符。
练习:
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员——IO流2
- 黑马程序员—IO流2
- 黑马程序员—IO流2
- 黑马程序员—IO流(2)
- 黑马程序员-【IO流2】
- 黑马程序员---IO流2
- 黑马程序员--IO流(2)
- 黑马程序员--IO流2
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 IO流
- 多timer管理实例-八音盒
- getmem函数的实现,笔试有改错的有要求直接写出来该函数的
- 获取所有APP包名和启动Activity名
- 解决iTunes connect上传后“Missing Localized Screenshots”错误
- Android Touch事件传递机制解析
- 黑马程序员—IO流2
- MFC DLL中添加DllMain的方法
- 第三次实验报告
- TCP/IP详解--第十九章
- 指针函数与函数指针的区别
- 【C++复习二】数据类型
- 回车和换行的区别
- 逆向分析能做什么或应用范围、应该怎么做
- C++中if语句后跟return时的用法