Java第十章IO
十、IO
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
File类
java.io.File类 1.凡是与输入、输出相关的类、接口等都定义在java.io包下 2.File是一个类,可以有构造器创建其对象。此对象对应着一个文件或文件目录 3.File类对象是与平台无关的 4.File中的方法,仅涉及到如何创建、删除、重命名等等,只要涉及文件内容的,File无能为力。必须有IO流来完成 5.File类的对象常作为IO流的具体类的构造器的形参。 路径: 绝对路径:包括盘符在内的完整的文件路径 相对路径:在当前文件目录下的文件的路径
File方法
getName()//获取文件名 getPath()//获取文件路径 getAbsoluteFile()//获取绝对文件名 getParent()//获取上一层的文件路径//相对路径时null getAbsolutePath()//获取绝对路径 renameTo(File newName)//重命名 file1.renameTo(file2)//file1重命名为file2.要求file文件一定存在,file2一定不存在 exists()//文件存在 canWrite()//文件可写 canRead()//文件可读 isFile()//是文件吗 isDirectory()//是文件目录 lastModfied()//最后修改时间 length()//内容长度 sysout(new Date(file1.lastModified())); createNewFile() delete() mkDir():创建一个文件目录,只有在上层文件目录存在的情况下,才能创建 mkDirs():创建一个文件目录,若上层文件目录不存在,一并创建。 list() :得到文件目录的内容,用字符串数组接收 listFiles():得到文件目录的内容,用文件数组接收。
IO的体系
流
FileInputStream
//read() @Test public void test1(){ FileInputStream fis = null; try { File file1 = new File("g:/IO/hello2.txt"); fis = new FileInputStream(file1); int b = fis.read(); while(b!=-1){ System.out.print((char)b); b = fis.read(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(fis != null){ try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
//read(byte[] byte)
@Test
public void test2(){
FileInputStream fis = null;
try {
File file2 = new File("g:/IO/hello2.txt");
fis = new FileInputStream(file2);
byte[] b = new byte[5];
int len ;
while((len = fis.read(b))!= -1){
for(int i= 0 ;i<len;i++){
}
String str = new String(b,0,len);
System.out.print(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
FileOutputStream
输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建,若存在,会将原有的文件覆盖
@Test public void test3(){ File file3 = new File("g:/IO/hello3.txt"); FileOutputStream fos = null; try{ fos = new FileOutputStream(file3); fos.write(new String("I love myself!").getBytes()); }catch(Exception e){ e.printStackTrace(); }finally{ if(fos!=null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
FileReaderFileWriter
@Test public void test5(){ FileReader fr = null; FileWriter fw = null; try { File file1 = new File("C:\\Users\\dell\\Desktop\\新建文件夹\\java基础.txt"); File file2 = new File("C:\\Users\\dell\\Desktop\\新建文件夹\\111.txt"); fr = new FileReader(file1); fw = new FileWriter(file2); int len; char[] c = new char[1000]; while((len=fr.read(c))!=-1){ fw.write(c, 0, len); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(fr!=null){ try { fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(fw!=null){ try { fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
BufferedInputStream/BufferedOutputStream
@Test public void test6(){ FileInputStream fis = null; FileOutputStream fos = null; BufferedInputStream bis = null; BufferedOutputStream bos = null; try { File file1 = new File("D:\\百度网盘下载\\java\\第10章:IO(day15-day16)\\day15\\day15_04IO流概述.wmv"); File file2 = new File("D:\\百度网盘下载\\java\\第10章:IO(day15-day16)\\day15\\1.wmv"); fis = new FileInputStream(file1); fos = new FileOutputStream(file2); bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); int len; byte[] b = new byte[1024]; while((len = bis.read(b))!= -1){ bos.write(b, 0, len); bos.flush(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(bis!= null){ try { bis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(bos!=null){ try { bos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
BufferedWriter/BufferedReader
@Test public void test7(){ BufferedWriter bw = null; BufferedReader br = null; try { File file1 = new File(""); File file2 = new File(""); FileReader fr = new FileReader(file1); FileWriter fw = new FileWriter(file2); br = new BufferedReader(fr); bw = new BufferedWriter(fw); String str; while((str = br.readLine())!= null){ bw.write(str); bw.newLine();//换行 bw.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(bw!=null){ try { bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(br!=null){ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
转换流:
InputStreamReader / OutputStreamWriter(前提:数据是文本文件)
/*如何实现字节流与字符流之间的转换: * 转换流:InputStreamReader OutputStreamWriter * 编码:字符串 ---->字符数组 * 解码:字符数组--->字符串 */ @Test public void test8(){ BufferedReader br = null; BufferedWriter bw = null; try { File file1 = new File(""); File file2 = new File(""); FileInputStream fis = new FileInputStream(file1); FileOutputStream fos = new FileOutputStream(file2); InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); br = new BufferedReader(isr); bw = new BufferedWriter(osw); String str; while((str = br.readLine())!=null){ bw.write(str); bw.newLine(); bw.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(bw!=null){ try { bw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(br!=null){ try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
标准的输入输出流:
标准的输出流:System.out
标准的输入流:System.in
str.toUpperCase();小写变大写
注:使用FileReader、FileWriter 可以实现文本文件的复制
对于非文本文件(视频文件、音频文件、图片),只能使用字节流
打印流:
打印流:字节流:PrintStream 字符流:PrintWriter //创建打印输出流,设置为自动刷新模式(写入换行符或字节'\n'时都会刷新输出缓存区) if(ps != null){//把标准输出流(控制台输出)改成文件 System.setOut(ps); }
数据流:
数据流:用来处理基本数据类型、String、字节数组的数据:DataInputStream DataOutputStream
对象流:
要实现序列化的类:1.要求此类是可序列化的,实现Serializable接口 2.要求类的属性同样的要实现Serializable接口 3.提供一个版本号,private static fianl long serialVersionUID 4.使用static 或 transient 修饰的属性,不可实现序列化 对象的序列化过程,将内存中的对象通过ObjectOutputStream转换为二进制流,存储到硬盘文件中 对象的反序列化过程,将二进制流通过ObjectInputStream转换为内存中的对象。
RandomAccessFile:
/* * RandomAccessFile:支持随机访问 * 1.即可以充当一个输入流,又可以充当一个输出流 * 2.支持从文件的开头读取、写入 * 3.支持从任意位置的读入、写入(插入) */ @Test public void testRandomAccess(){ RandomAccessFile raf1 = null; RandomAccessFile raf2 = null; try { raf1 = new RandomAccessFile(new File("hello.txt"),"r"); raf2 = new RandomAccessFile(new File("hello1.txt"),"rw"); byte[] b = new byte[5]; int len; while((len = raf1.read(b)) != -1){ raf2.write(b,0, len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(raf1 != null){ try { raf1.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(raf2!=null){ try { raf2.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
/*
* 实现文件指定位置插入数据
*/
@Test
public void test2(){
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(new File("hello1.txt"), "rw");
raf.seek(4);//把指针位置移到第4个位置
byte[] b = new byte[10];
int len;
StringBuffer sb = new StringBuffer();
while((len = raf.read(b))!=-1){
sb.append(new String(b,0,len));//把文件中当前指针位置后面的数据存到StringBuffer
}
raf.seek(4);
raf.write("YHS".getBytes());
raf.write(sb.toString().getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(raf!=null){
try {
raf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

更多精彩