实训之--javaIo的基础知识
关于这部分的内容,我感觉还是比较简单的,无非是些写好的方法,能过有些次数的使用就能很好的掌握了。不像集合和数组,操作起来
是头疼。但是实际应用中是有的,传个附件之类的。
javaI包中有5个类和一个接口。分别是 Class : File,InputStream,OutPutStream,writer,reader. interface : Serializable进行序列化
一、Filel类:
最常用的方法
File(pathName);
File(fatherPath,childrenPath);
boolean createNewFile throws IOException(File);
exists();
delete();
mkdir();//创建多级目录
length();
isFIle;
isDirectory();
getParentsFile()父路径
String [] list() 取得目录下所有目录名
File [] listFiles() 取得目录下文件对象数组
操作1.创建文件
public static void main(String[] args) throws IOException {
File file=new File("D:\\myNewFile.txt");
if(file.exists()) {
file.delete();
}
else {
file.createNewFile();
}
操作2.文件路径问分隔符:
windows中为 \ linux中为/ ;为了适应操作系统,提供了separator属性。故开发中写路径为new File(“d:”+File.separator+"a.text");
操作3.创建多级目录public static void main(String[] args) throws IOException {
File file=new File("d:"+File.separator+"aa"+File.separator+"bb"+"test.txt");
if(file.getParentFile().exists()) {
file.getParentFile().mkdir();
}
file.createNewFile();
}
操作4、文件复制
public class FileCopy {
public FileCopy() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
long start=System.currentTimeMillis();
//对输入的文件参数进行验证
if(args.length !=2){
System.out.println("命令指向错误");
System.exit(1);
}
File inFile=new File(args[0]);//数组中第一个为文件路径
if(!inFile.exists()) {
System.out.println("源文件路径不存在");
System.exit(1);
}
File outFile=new File(args[1]);
if(!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
//进行输出,输入操作。
InputStream inputStream=new FileInputStream(inFile);
OutputStream outputStream= new FileOutputStream(outFile);
int temp=0;
byte data[]=new byte[1024];
while((temp=inputStream.read(data))!= -1) {
outputStream.write(data, 0, temp);
}
inputStream.close();
outputStream.close();
}
操作5、列出目录所有文件
public class ListAllFile {
public ListAllFile() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
File file=new File("E:\\javaNewWeb");
System.out.println(file.listFiles());
print(file);
}
public static void print(File file) {
if(file.isDirectory()) {
File result[]=file.listFiles();
if(result!=null) {
for(int x=0;x<result.length;x++) {
print((result[x]));//递归
}
}
System.out.println(file);
}
}
}
全部属于抽象类。最麻烦的是它们的子类。
OutputStream及InputStream类
OutputStream类
子类FileOutputStream 实现Closeable,和Flushable接口可以进行自动关闭,和刷新
字节流, 方向:相对于文件本身;
常用方法: close(); flush():刷新:
write() 输出单个,部分,全部的字节。
构造:fileOUtputStream(file,[boolean]) : boolean选择为true,表示追加新内容到文件中。
InputStream类
子类:FileInputStream
read() 仍然是3中参数的传入,对应3种不同读方式。如果没有内容,返回-1
writer和Reader
对字符的操作。实现closeable; flushable;appendable接口
常用方法: close(); flush(); append()追加数据; write() 输出String write(char[]) 输出字符数组。
子类
FileWriter
Reader和writer完全一样。
操作说明:这四个类的方法都是在父类Out/InputStream,Out/InputWriter/Reader中,在它们的子类,比如FileOutputStram中是没有方法的,所以在创建FileInputStream时,一定要向上转型。
public static void main(String[] args) throws IOException {
File file=new File("d:"+File.separator+"OutputStream"+File.separator+"abc.txt");
if(!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
OutputStream output=new java.io.FileOutputStream(file);
String date="这里是中国陕西省,中央任梦s政府";
byte data[]=date.getBytes();
//单个字符进行输出
/*for(int i=0;i<date.length ();i++) {
output.write(data);
}*/
output.write(data);
output.close();
操作套路都一样,主要的就是创建流,然后创建文件路径,然后根据具体情况,即通过byte/String进行 读/写。
特别注意的是读写的方向。可以这样记忆:参照物是内存:InputStream :向内存输入文件,便是从源文件中读取,操作方法便是read. OutputStram同理。 Writer:我靠,这个没搞清楚。。。待续
打印流:设计思想:outputStram类主要用来输出,但是它只能输出byte类型,生活中常常需要输出的是
int,String,等。这样,打印流就将outPutStram进行了包装,然后输出常用类型。打印流继承了outputStream
这是装饰设计模式,将原本功能不足的类用另外的类包装。
PrintStream,printwriter:
常用方法:print(); println()
System类对Io的支持
3个对象常量: err, out ,in
err,out 属于printStream; in属于Input类型
System.out.println:本质: 调用System类中常量,然后调用打印流中的print()方法。
三、缓冲流
BufferReader BufferINputStream
四、序列化:Serializable
它是一个接口,但是没有方法。代表一种能力,一种能进行二进制传输以及文件保存的能力
序列化操作类ObjectOutPutStre