java从入门到精通学习笔记Lesson 7io操作.docx
- 文档编号:4471259
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:19.67KB
java从入门到精通学习笔记Lesson 7io操作.docx
《java从入门到精通学习笔记Lesson 7io操作.docx》由会员分享,可在线阅读,更多相关《java从入门到精通学习笔记Lesson 7io操作.docx(13页珍藏版)》请在冰豆网上搜索。
java从入门到精通学习笔记Lesson7io操作
File类
●一个File类的对象,表示了磁盘上的文件或目录。
●File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作。
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
Filef=newFile("English.txt");
f.createNewFile();
//f.mkdir();
}
}
运行结果产生一个名为English.txt的文本文件。
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
Filef=newFile("English.txt");
//f.createNewFile();
f.mkdir();
}
}
运行结果产生一个名为English.txt的文件夹。
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
Filef=newFile("D:
\\English.txt");
f.createNewFile();
}
}
运行结果为在指定的D:
\目录下生成English.txt文件。
注意”\”在java中有特殊的用法,要输出”\”必须连着写两个”\”符号。
Separator
publicstaticfinalStringseparator
Thesystem-dependentdefaultname-separatorcharacter,representedasastringforconvenience.Thisstringcontainsasinglecharacter,namelyseparatorChar.(与系统有关的默认名称分隔符,出于方便考虑,它被表示为一个字符串。
此字符串只包含一个字符,即separatorChar。
)
publicstaticfinalcharseparatorChar
Thesystem-dependentdefaultname-separatorcharacter.Thisfieldisinitializedtocontainthefirstcharacterofthevalueofthesystempropertyfile.separator.OnUNIXsystemsthevalueofthisfieldis'/';onMicrosoftWindowssystemsitis'\'.(与系统有关的默认名称分隔符。
此字段被初始化为包含系统属性file.separator的值的第一个字符。
在UNIX系统上,此字段的值为'/';在MicrosoftWindows系统上,它为'\\'。
)
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
FilefDir=newFile(File.separator);
StringStrFile="javalesson"+File.separator+"Lesson7"+File.separator+"English.txt";
Filef=newFile(fDir,StrFile);
f.createNewFile();
}
}
运行结果在E:
\javalesson\Lesson7目录下生成English.txt文件.
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
FilefDir=newFile(File.separator);
StringStrFile="javalesson"+File.separator+"Lesson7"+File.separator+"English.txt";
Filef=newFile(fDir,StrFile);
f.createNewFile();
f.delete();//删除生成的文件English.txt
}
}
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
FilefDir=newFile(File.separator);
StringStrFile="javalesson"+File.separator+"Lesson7"+File.separator+"English.txt";
Filef=newFile(fDir,StrFile);
f.createNewFile();
//f.delete();
f.deleteOnExit();//Deletethefilewhentheprogramexits
Thread.sleep(3000);//Madethethreadsleepfor3000ms
}
}
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
for(inti=0;i<5;i++)
{
Filef=File.createTempFile("English",".tmp");
//在系统默认的临时文件夹下生成名为English后缀名为.tmp的文//件.系统自动将其编号.
f.deleteOnExit();//Deletethefilewhentheprogramexits
}
Thread.sleep(3000);//Madethethreadsleepfor3s
}
}
注:
可以通过修改临时文件夹的用户环境变量Temp和Tem的值来修改默认的临时文件夹路径.如Temp的值改为C:
\
Tem的值改为C:
\
修改后需要重新起动计算机.
importjava.io.*;
classFileTest
{
publicstaticvoidmain(String[]args)throwsException
{
FilefDir=newFile(File.separator);
StringStrFile="javalesson"+File.separator+"Lesson7";
Filef=newFile(fDir,StrFile);
String[]names=f.list();
for(inti=0;i { System.out.println(names[i]); } } 运行后将列出在E: \javalesson\Lesson7下的文件名及子目录. importjava.io.*; classFileTest { publicstaticvoidmain(String[]args)throwsException { FilefDir=newFile(File.separator); StringStrFile="javalesson"+File.separator+"Lesson7"; Filef=newFile(fDir,StrFile); String[]names=f.list(newFilenameFilter() {//内部类实现FilenameFilter接口 publicbooleanaccept(Filedir,Stringname) { returnname.indexOf(".java")! =-1; } }); for(inti=0;i { System.out.println(names[i]); } } } 运行后只列出后缀名为.java的文件 流式I/O ●流(Stream)是字节的源或目的. ●两种基本的流是: 输入流(InputStream)和输出流(OutputStream).可从中读出一系列字节的对象称为输入流.而能向其中写入一系列字节的对象称为输出流. 流的分类 ●节点流: 从特定的地方读写的流类,例如: 磁盘或一块内存区域。 ●过滤流: 使用节点流作为输入或输出。 过滤流是使用一个已经存在的输入流或输出流连接创建的。 InputStream ●三个基本的读方法 abstractintread(): 读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。 intread(byte[]b): 将数据读入一个字节数组,同时返回实际读取的字节数,如果返回-1,表示读到了输入流的末尾。 Intread(byte[]b,intoff,intlen): 将数据读入一个字节数组,同时返回实际读取的字节数。 如果返回-1表示读到了输入流的末尾。 off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。 ●其它方法 longskip(longn): 在输入流中跳过n个字节,并返回实际跳过的字节数。 intavailable(): 返回在不发生阻塞的情况下,可读取的字节数。 voidclose(): 关闭输入流,释放和这个流相关的系统资源。 ●voidmark(intreadlimt): 在输入流的当前位置放置一个标记,如果读取的字节多于readlimt设置的什,则流忽略这个标记。 voidreset(): 返回到上一个标记。 booleanmarkSupported(): 测试当前流是否支持mark和方法。 如果支持返回true,否则返回false。 OutputStream ●三个基本的写方法 abstractvoidwrite(intb): 往输出流中写入一个字节。 voidwrite(byte[]b): 往输出流中写入数组b中的所有字节。 voidwrite(byte[]b,intoff,intlen): 往输出流中写入数组b中从偏移量off开始的len个字节的数据。 ●其它方法 voidflush(): 刷新输出流,强制缓冲区中的输出字节被写出。 voidclose(): 关闭输出流,释放和这个流相关的系统资源。 importjava.io.*; classStreamTest { publicstaticvoidmain(String[]args)throwsException { intdata; while((data=System.in.read())! =-1) { System.out.write(data); } } } 编译: javacStreamTest.java 执行: javaStreamTest 输入: 输出: 按‘ctrl’+‘c’跳出循环 基本的流类 ●FileInputStream和FileOutputStream 节点流,用于从文件中读取或往文件中写入字节流。 如果在构造FileOutputStream时,文件已经存在,则覆盖这个文件。 ●BufferedInputStream和BufferedOutputStream 过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。 ●DataInputStream和DataOutputStream 过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。 ●PipedInputStream和PipedOutputStream 管道流,用于线程间的通信。 一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。 要使管道流有用,必须同时构造管道输入流和管道输出流。 importjava.io.*; classStreamTest { publicstaticvoidmain(String[]args)throwsException { //生成English.txt文件并将的内容写入 FileOutputStreamfos=newFileOutputStream("English.txt"); fos.write("".getBytes()); fos.close(); //从English.txt中读出其中的内容 FileInputStreamfio=newFileInputStream("English.txt"); byte[]buf=newbyte[100]; intlen=fio.read(buf); System.out.println(newString(buf,0,len)); fio.close(); } } importjava.io.*; classStreamTest { publicstaticvoidmain(String[]args)throwsException { FileOutputStreamfos=newFileOutputStream("English.txt"); BufferedOutputStreambos=newBufferedOutputStream(fos); bos.write("".getBytes()); //将输入流存入缓冲区,并不会输出到显示器。 bos.flush();//或者bos.flush(); //将存储在缓冲区的数据输出到显示器。 } } importjava.io.*; classStreamTest { publicstaticvoidmain(String[]args)throwsException { FileOutputStreamfos=newFileOutputStream("English.txt"); BufferedOutputStreambos=newBufferedOutputStream(fos); bos.write("".getBytes()); bos.flush();//或者bos.flush(); FileInputStreamfis=newFileInputStream("English.txt"); BufferedInputStreambis=newBufferedInputStream(fis); byte[]buf=newbyte[100]; intlen=bis.read(buf); System.out.println(newString(buf,0,len)); bis.close(); } } importjava.io.*; classStreamTest { publicstaticvoidmain(String[]args)throwsException { FileOutputStreamfos=newFileOutputStream("English.txt"); BufferedOutputStreambos=newBufferedOutputStream(fos); DataOutputStreamdos=newDataOutputStream(bos); byteb=3; inti=8; charch='a'; floatf=4.5f; dos.writeByte(b); dos.writeInt(i); dos.writeChar(ch); dos.writeFloat(f); dos.close(); FileInputStreamfis=newFileInputStream("English.txt"); BufferedInputStreambis=newBufferedInputStream(fis); DataInputStreamdis=newDataInputStream(bis); System.out.println(dis.readByte()); System.out.println(dis.readInt()); System.out.println(dis.readChar()); System.out.println(dis.readFloat()); dis.close(); } } 运行结果为: 3 8 a 4.5 importjava.io.*; classPipedStreamTest { publicstaticvoidmain(String[]args) { PipedOutputStreampos=newPipedOutputStream(); PipedInputStreampis=newPipedInputStream(); try { pos.connect(pis); newProducer(pos).start(); newConsumer(pis).start(); } catch(Exceptione) { e.printStackTrace(); } } } classProducerextendsThread { privatePipedOutputStreampos; publicProducer(PipedOutputStreampos) { this.pos=pos; } publicvoidrun() { try { pos.write("Hello,welcomeyou! ".getBytes()); pos.close(); } catch(Exceptione) { e.printStackTrace(); } } } classConsumerextendsThread { privatePipedInputStreampis; publicConsumer(PipedInputStreampis) { this.pis=pis; } publicvoidrun() { try { byte[]buf=newbyte[100]; intlen=pis.read(buf); System.out.println(newString(buf,0,len)); pis.close(); } catch(Exceptione) { e.printStackTrace(); } } } 运行结果为: Hello,welcomeyou! JavaI/O库的设计原则 ●Java的I/O库提供了一个称作链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。 这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。 ●通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取的。 ●我们要获取一个I/O对象,往往需要产生多个I/O对象,这也是JavaI/O库不太容易掌握的原因,但在I/O库中Decorator模式的运用,给我们提供了实现上的灵活性。 Reader和Writer ●Java程序评议使用Unicode来表示字符串和字符。 ●Reader和Writer这两个抽象类主要用来读写字符流。 字符集的编码 ●ASCII(AmericanStandardCodeforInformationInterchange,美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统。 我们知道英文中经常使用的字符、数字符号被计算机处理时都是以二进制码的形式出现的。 这种二进制码的集合就是所谓的ASCII码。 每一个ASCII码与一个8位(bit)二进制数对应。 其最高位是0,相应的十进制数是0—127。 如,数字“0”的编码用十进制表示就是48。 另有128个扩展的ASCII码,最高位都是1,由一些制表符和其它符号组成。 ASCII是现今最通用的单字节编码系统。 ●GB2312: GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集—基本集》。 主要用于给每一个中文字符指定相应的数字,也就是进行编码。 一个中文字符用两个字节的数字来表示,为了和ASCII码有所区别,将中文字符每一个字节的最高位置都用1来表示。 ●GBK: 为了对更多的字符进行编码,国家又发布了新的编码系统GBK(GBK的K是“扩展”的汉语拼音第一个字母)。 在新的编码系统里,除了完全兼容GB2312外,还对繁体中文、一些不常用的汉字和许多符号进行了编码。 ●ISO-8859-1: 是西方国家所使用的字符编码集,是一种单字节的字符集,而英文实际上只用了其中数字小于128的部分。 ●Unicode: 这是一种通用的字符集,对所有语言的文字进行了统一编码,对每一个字符都用2个字节来表示,对于英文字符采取前面加“0”的策略实现等长兼容。 如“a”的ASCII码为0x61,UNICODE就为0x00,0x61。 ●UTF-8: Eight-bitUCSTransformationFormal,(UCS,UniversalCharacterSet,通用字符集,UCS是所有其它字符集标准的一个超集)。 一个7位的ASCII码值,对应的UTF码是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java从入门到精通学习笔记Lesson 7io操作 java 入门 精通 学习 笔记 Lesson io 操作