您的位置:首页 > 职场人生

黑马程序员——io流(二)字节流

2014-08-08 20:18 337 查看
  -------
android培训、java培训、期待与您交流! ----------
操作文本数据使用字符流,操作非文本数据使用字节流。但是使用字节流的方法基本和字符流是一样

字节:是计算机最底层的储存容量和传输容量的一种计量单位。

输入流:InputStream。 打开指定文件:FileInputStream()
缓冲区:BufferedInputStream()

输出流:OutputStream。 输出到指定文件:FileOutputStream()
缓冲区:BufferedOutputStream()

拷贝一个系统的音频文件,到D盘

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**拷贝一个系统的音频文件,到D盘
* */
public class IOInputOutput
{
public static void main(String[] args) throws IOException
{
BufferedInputStream bufIns = new BufferedInputStream(new FileInputStream("C:/Windows/Media/town.mid"));
BufferedOutputStream bufOuts = new BufferedOutputStream(new FileOutputStream("d:/copy_town.mid"));

byte[] data = new byte[1024*10];		//定义字节缓冲区
int flag;
while((flag=bufIns.read(data))!=-1)
{
bufOuts.write(data,0,flag);		//写出字节缓冲区的有效数据
bufOuts.flush();
}

bufIns.close();
bufOuts.close();

System.out.println("拷贝成功");
}
}


读取键盘录入:System.in :该方法是阻塞式方法。没有读到数据就会一直等到。

字节流转字符流:如果是纯文本数据的话,可以考虑使用该流,因为转成字符流之后,可以很方便的一次性读一行。InputStreamReader(构造方法中还能支持执行编码)

字符流转字节流:因为计算机存储的方式是为字节流的。所以必须将要输出的数据转成字节流才能进行传输和存储。OutputStreamWriter(构造方法中还能支持执行编码)

流的操作规律:

1、源:键盘录入 2、源:键盘(System.in)
3、源:文件

目:控制
目:文件 目:控制台(System.out)

流对象基本规律:

1、明确 源 和目的:源:InputStream Reader 目的:OutputStream
Writer

2、明确是否是纯文本:是 字符流 ,
不是 字节流

3、当体系明确后,在明确要使用哪个具体对象,通过设备来划分:

源:内存,文件,键盘(System.in)

目的:内存,文件,控制台(System.out)

File类:表示文件或目录,他的常用方法不涉及(IOException)

1、创建

①createNewFile():在指定路径创建文件,文件不存在就创建,有就放弃。

②mkdir():创建目录(只能创建一级目录)

③mkdirs():创建目录(允许创建多级)

2、删除

①boolean delete():删除文件

②deleteOnExit():当虚拟机退出后自动删除。

3、判断

①exists():判断目录或文件是否存在。

②isFile():判断是否是常规文件

③isDirectory():判断是否是目录

④isHidden():判断是否是隐藏文件

4、获取

①getName():返回文件或目录名

②getPath():返回路径,封装什么路径就返回什么路径

③getParent():返回绝对路径中的父目录,如果是相对路径返回null

④getAbsolutePath():不管封装的什么都是返回绝对路径

⑤long lastModified():返回最后一次修改时间

⑥long length():返回文件长度

⑦String[] list():返回一个目录的文件包含隐藏文件

⑧String[] list(过滤器):返回一个指定信息的文件

⑨File[] listFiles():方法同list()。但是返回File,更常用,因为封装成对象,我可以使用对象的方法。

练习:打印C盘下的所有文件(包含隐藏的)

import java.io.File;

public class IOFile
{
public static void main(String[] args)
{
printFile(new File("c:/"));
}

public static void printFile(File path)
{
if(!(path.exists()))
throw new RuntimeException("目录错误");
File[] pathArr = path.listFiles();<span style="white-space:pre">	</span>//返回指定路径下的试图

for(File element : pathArr)<span style="white-space:pre">		</span>//遍历数组
{
System.out.println(element.getAbsolutePath());
}
}

}


io流和集合 想结合的类:持久的属性集Properties。

Properties属于Hashtable的子类,具备Map集合的特点,但是他里面存储的都是String,String。该对象的特点:可以用于键值对形式的配置文件。在加载数据时,需要数据有固定的格式。例如:键=值

使用load加载流,将配置文件读取到Properties集合中。

getProperty(key):通过键,查找值

list(输出流):将属性列表信息输出到指定的输出流。

load(输入流):从输入流中读取属性列表。

setProperty(键,值):修改和新建值。底层其实是put。

StringProperNames():返回 set<String> 键集合。

store(输出流:描述信息):将Properties 保存到文件,描述信息可为空

练习:制作一个用于应用程序运行次数,到次数就提示不能运行了。

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

/**练习:制作一个用于应用程序运行次数,到次数就提示不能运行了。
* */
public class IOProperties
{
public static void main(String[] args)
{
File path = new File("C:/Windows/System32/Masai.properties");

Properties prop = new Properties();

try
{
prop.load(new FileReader(path));		//加载配置信息

}
catch (IOException e)
{
try
{
path.createNewFile();	//如果抛异常,就进行第一次初始化,创建指定文件
Properties init = new Properties();		//创建另一个 集合
init.setProperty("count", "1");			//写入指定数据
init.store(new FileWriter(path), "ini");	//保存到文件

prop.load(new FileReader(path));	//初始化成功以后,在读取一次
}
catch (IOException e1)
{
System.out.println("创建" + path + "失败");
}
}

int count = Integer.parseInt(prop.getProperty("count"));	//通过key查询出value值,并将它转成 数字

if(count <= 5 )
{
prop.setProperty("count", String.valueOf(++count));
try
{
prop.store(new FileWriter(path),"ini");
}
catch (IOException e)
{
throw new RuntimeException("程序异常即将退出");
}

System.out.println("运行成功");
}
else
{
System.out.println("运行失败,请充值");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: