------- android培训、java培训、期待与您交流! ----------
对IO的总结二
1. File类常见方法:
1,创建。
boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立,就创建文件了,而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。
boolean delete():删除失败返回false,如果文件正在被使用,则删除不了,返回false。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。
boolean exists() :文件是否存在.
isFile():
isDirectory();相对路径,就是默认的路径;
isHidden();
isAbsolute();绝对路径,他文件是否存在,都为true,只要带着盘符就可以;
4,获取信息。
getName():
getPath():
getParent():
getAbsolutePath()
long lastModified()
long length()
5,f2.renameTo(f1)修改文件的名称
2. 创建file对象的方法有三种;
//将a.txt封装成file对象。可以将已有的和未出现的文件或者文件夹封装成对象。
File f1 = new File("a.txt");
//路径名,加上文件名;
File f2 = new File("c:\\abc","b.txt");
File d = new File("c:\\abc");
File f3 = new File(d,"c.txt");
3. 用过滤的方法来获取文件的信息
File dir = new File("d:\\java1223\\day18");
//这个是获取的是字符串传入的是内部类对象;
String[] arr = dir.list(new FilenameFilter()
{
//它的返回结果,决定着过滤条件;
public boolean accept(File dir,String name)
{
return name.endsWith(".bmp");
}
});
System.out.println("len:"+arr.length);
// 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
//返回所有的文件名;包括文件和文件夹;
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]);
}
}
4. 打印流:
该流提供了打印方法,可以将各种数据类型的数据都原样打印。
字节打印流:
PrintStream
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
字符打印流:
PrintWriter
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4,字符输出流,Writer。
代码如下,可以直接打印到文件当中;
//键盘录入;转换流;
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
FileWriter fw = new FileWriter("a.txt");
// 接收一个流对象;true具有刷新缓冲区的功能。
//创建新 PrintWriter.打印到文件当中;
PrintWriter out = new PrintWriter(fw,true);
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
//打印到相应的文件中,这里我们打印到a.txt中;
//这里调用打印流;打印到的目的地;
out.println(line.toUpperCase());
}
out.close();
bufr.close();
5. Properties是hashtable的子类。
也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串。
是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。
那么在加载数据时,需要数据有固定格式:键=值。
这个类里面有键值对的集合。
Properties prop = new Properties();
与文件相关联;
FileInputStream fis = new FileInputStream("info.txt");
将流中的数据加载进集合。
prop.load(fis);
这里修改了流中的数据源的数据,所以我们还要写到文件中,修改文件中的数据;
prop.setProperty("wangwu","39");
FileOutputStream fos = new FileOutputStream("info.txt");
写入到文件中,haha是文件的注释;
prop.store(fos,"haha");
System.out.println(prop);
列出所有的数据;
prop.list(System.out);
fos.close();
fis.close();
6. 文件的切割和合并;
//这个集合比Vector要高效。
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
//3个碎片;流添加到集合中;
for(int x=1; x<=3; x++)
{
al.add(new FileInputStream("c:\\splitfiles\\"+x+".part"));
}
//通过迭代器的方式来获得枚举类型的引用;和枚举类型的引用相关联;
final Iterator<FileInputStream> it = al.iterator();
// 这个是一个内部类的方式,获取对象;
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
{//复写里面的2个方法;
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
//SequenceInputStream 表示其他输入流的逻辑串联。
//它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,
//接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
//它的参数类型必须接受一个枚举类型的输入流参数;
SequenceInputStream sis = new SequenceInputStream(en);
//将碎片合并成一个文件;
FileOutputStream fos = new FileOutputStream("c:\\splitfiles\\0.bmp");
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
7. 用于操作字节数组的流对象。
ByteArrayInputStream :
在构造的时候,需要接收数据源,而且数据源是一个字节数组。
ByteArrayOutputStream:
在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。
这就是数据目的地。
因为这两个流对象都操作的数组,并没有使用系统资源。
所以,不用进行close关闭。
在流操作规律讲解时:
源设备,
键盘 System.in,硬盘 FileStream,内存 ArrayStream。
目的设备:
控制台 System.out,硬盘FileStream,内存 ArrayStream。
用流的读写思想来操作数据。
同理还有
CharArrayInputStream
CharArrayOutputStream是一样的用法;
还有StringReader和StringWriter也是一样的用法;
8. DataInputStream与DataOutputStream
可以用于操作基本数据类型的数据的流对象。
修改版的utf-8和标准版的utf-8,区别是编码有些不同
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));
dos.writeInt(234);//4个字节
dos.writeBoolean(true);//1个字节
dos.writeDouble(9887.543);//8个字节
dos.close();
可以直接写data类型的数据;
另外它还可以写修改版的utf_8数据;
DataOutputStream dos = new DataOutputStream(new FileOutputStream("utfdate.txt"));
// 修改版的utf-8 用它写数据,就要用dis.readUTF()读数据;
dos.writeUTF("你好");
9. 编码:字符串变成字节数组。
解码:字节数组变成字符串。
//控参数是默认的编码表;
String-->byte[]; str.getBytes(charsetName);
byte[]-->String: new String(byte[],charsetName);
代码
String s = "哈哈";
//默认编码形式;加密;
byte[] b1 = s.getBytes("GBK");
//把数组变成字符串打印出来;打印出来的是一些字节;如-12,-34.等等;
System.out.println(Arrays.toString(b1));
//解码;将字节数组变成字符串;
String s1 = new String(b1,"ISO8859-1");
System.out.println("s1="+s1);
//对s1进行iso8859-1编码。
//我们进行编码,拿到重新拿到数据.再打印出来;应用就是tomcat服务器里面就是ISO8859-1;
//注意这里不能用utf-8做同样的效果;
byte[] b2 = s1.getBytes("ISO8859-1");
System.out.println(Arrays.toString(b2));
String s2 = new String(b2,"gbk");
//还原了我们的数据
System.out.println("s2="+s2);
10. //读取对象文件的方法,读取写入的文件;
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
//读取的方法;
Person p = (Person)ois.readObject();
System.out.println(p);
ois.close();
11. //Serializable序列化,它里面没有方法,所以又叫标记性接口;
//注意;序列号是根据成员获取出来的;uid。我们要自己生成uid那么再改动代码的时候,就不会找不到了;
class Person implements Serializable
{
//这个是给类定义一个固定表示,为了序列化方法,本类改变,可以可以操作旧的序列化对象;
public static final long serialVersionUID = 42L;
12. //输入管道流和输出管道流,进行连接操作;局部变量必须被初始化;
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);
构造函数,只是传递引用,没有再创建新的对象;
Read r = new Read(in);
Write w = new Write(out);
//启动线程的方式;用线程对象启动线程
new Thread(r).start();
new Thread(w).start();
13. RandomAccessFile
该类不是算是IO体系中子类。
而是直接继承自Object。
但是它是IO包中成员。因为它具备读和写功能。
内部封装了一个数组,而且通过指针对数组的元素进行操作。
可以通过getFilePointer获取指针位置,
同时可以通过seek改变指针的位置。
其实完成读写的原理就是内部封装了字节输入流和输出流。
通过构造函数可以看出,该类只能操作文件。
而且操作文件还有模式:只读r,读写rw等。
如果模式为只读 r。不会创建文件,会去读取一个已存在文件,如果该文件不存在,则会出现异常。
如果模式rw。操作的文件不存在,会自动创建。如果存在,则不会覆盖。
应用;
下载软件原理;
用不同的线程分段数据写入;多个线程同时写入数据不会出错误;
一般流,是从头往后写数据;要是多个线程同时写数据,会出错误;
/**
* 随机写数据。很牛;写入数据到任何位置;可以修改任意文件;
* 修改文件的方式,就是写入到应该修改文件的位置,直接把原位置的元素给冲掉了;
* @throws IOException
*/
public static void writeFile_2()throws IOException
{
RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
raf.seek(8*0);
raf.write("周期".getBytes());
raf.writeInt(103);
raf.close();
}
14. 写文件;writeInt和write的区别;
* writeInt。写入的是32位字节;
* write写的是8位字节;
* 用write容易丢失数据;
相关推荐
黑马程序员_毕向东_Java基础视频教程第18天-14-IO流(拷贝文本文件图例).zip
黑马程序员_毕向东_Java基础视频教程第18天-09-IO流(文件的续写)
在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...
【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...
【Java基础辅导班教程】- 黑马程序员 在编程世界中,Java是一种广泛应用的面向对象的编程语言,尤其在企业级应用开发中占据主导地位。"黑马程序员"作为知名的IT培训机构,提供了丰富的Java基础辅导课程,旨在帮助...
这个名为“黑马程序员_毕向东_Java基础源码.rar”的压缩包文件,包含了丰富的Java基础源代码实例,对于初学者来说,是深入了解Java编程的良好资源。 一、Java基本语法 Java语言以其严格的类型检查和面向对象特性...
在这个“黑马程序员_毕向东_Java基础视频教程第18天-12-IO流(文本文件读取练习)”中,毕向东老师将深入讲解如何使用Java IO流来读取文本文件。Java IO流提供了多种类和方法,使得开发者可以灵活高效地处理输入和输出...
本教程《黑马程序员_毕向东_Java基础视频教程第18天-13-IO流(拷贝文本文件)》专注于讲解如何利用IO流来实现文本文件的复制操作。这个过程涉及到了对文件读取、数据缓冲以及写入等基础知识,对于初学者来说是理解和...
8. **文件与IO流**:虽然未明确指出,但文件操作和IO流通常是Java基础课程的一部分。学员可能会学习如何读写文件,使用不同的输入/输出流进行数据传输。 9. **集合框架**:Java集合框架包括List、Set、Queue等接口...
在本教程“黑马程序员_毕向东_Java基础视频教程第18天-11-IO流(文本文件读取方式二)”中,主讲人毕向东将深入讲解如何使用Java有效地读取文本文件,特别是第二种常用的方法。以下是关于Java IO流和文本文件读取的...
通过对传智播客_Java培训_毕向东_Java基础[07-IO]的教学资料进行解析,我们可以了解到Java中IO流的基本概念、分类及其实现方式。掌握这些基础知识对于后续学习Java中的高级特性非常有帮助。此外,了解并熟练运用异常...
行时所需要的基本条件和许多 Java 基础类,例如,IO 类、GUI 控件类、网络类等。JRE 是提供给 普通用户使用的,如果你只想运行别人开发好的 Java 程序,那么,你的计算机上必须且只需安装 JRE。 JDK(Java ...
本资料包“Java-IO流高级-例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar”提供了一个深入学习Java IO流的全面资源,包含实例题目、源代码以及PPT教学材料,适合对Java IO有进阶需求的开发者。 1. **Java ...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
"黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须...
《黑马程序员毕向东Java基础课堂完整版文档》是一份全面且深入的Java学习资源,由知名教育机构黑马程序员的讲师毕向东倾力打造。这份资料涵盖了从Java编程基础到高级特性的全过程,旨在帮助初学者系统地掌握Java编程...
Java的IO流系统支持数据的输入和输出,包括字符流和字节流,以及缓冲区、转换流和对象序列化等。 16. **多线程**: Java内置了对多线程的支持,通过Thread类或实现Runnable接口可以创建并管理多个执行线程。 17....
### 黑马程序员入学Java知识(精华总结) #### 一、Java概述与基础知识 ##### 1、何为编程? 编程是指使用计算机语言来编写指令,这些指令被计算机执行以完成特定任务的过程。通过编程,我们可以控制计算机的行为...
本资源包含的是Java-IO流的基础例题、源码及PPT教学文档,适合初学者和进阶者深入理解Java IO流的使用。 一、Java IO流概述 Java IO流分为字节流和字符流两大类,字节流处理的是8位的字节数据,而字符流处理的是16...
《黑马程序员Java面试宝典》是一本专门为Java开发者准备的面试指南,包含了广泛而深入的Java技术知识,以及面试过程中可能会遇到的各种问题。这本书的完整版PDF提供了丰富的学习材料,帮助求职者提升自己的技术水平...