java基础整理二十(IO流二)

来源:互联网 发布:如何用spss分析数据 编辑:程序博客网 时间:2024/05/16 15:26


 
第二十天
File类:
创建File类对象的方法:将文件或文件夹封装成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");
File.separator路径分割符即"c:"+File.separator+"abc"

File类的常见方法:
1,创建
 boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false
 和输出流不一样,输出流对象创建文件,当文件已存在时会覆盖.
 boolean mkdir();创建目录 boolean mkdirs();创建多级目录
2,删除
 boolean delete():删除失败返回false
 void deleteOnExit():在程序退出时删除指定文件
3,判断
 boolean exidts():文件是否存在 isFile():是否为文件 isDirectory():是否为文件夹
 isHidden():是否为隐藏文件 isAbsolute():是否为绝对目录
4,获取
 getName();获取名称 getPath();获取路径 getParent()返回绝对路径中的父目录,如果是相对路径返回null有上层目录时返回上层目录
 getAbsolutePath():获取绝对路径 lastModified():最后修改时间 length():返回文件大小 f1.rennameTo(f2);f1替换为f2

list():列出目录下文件列表 调用list方法的file对象必须是封装了一个目录.且必须存在
listRoots():列出盘符 listFiles():返回为对象可以具体操作

过滤指定类型文件:
import java.io.*;
class Demo
{
 public static void main(String[]args)
 {
  File f = new File("e:\\abc");
  String[] name = f.list(new FilenameFilter()
  {
   public boolean accept(File e,String name)
   {
    return name.endsWith(".java");
   }
  });
  for (String n:name)
  {
   System.out.println(n);
  }
 }
}

列出指定目录下文件或者文件夹包含子目录中的内容递归手法
递归注意:1,限定条件 2,注意递归次数防止内存溢出
import java.io.*;
class Demo
{
 public static void main(String[]args)
 {
  File f = new File("e:\\");
  show(f);
 }
 public static void show(File f)
 {
  System.out.println(f);
  File[] files = f.listFiles();打印目录名称
  for (int x = 0;x<files.length ;x++ )
  {
   if (files[x].isDirectory())判断是否还为目录
   show(files[x]);
   else
    System.out.println(files[x]);
  }
 }
}

删除原理:
在window中,删除目录运用递归从里往外删的
import 将ava.io.*;
class RemoveDir
{
 public static void main(String[]args)
 {
  File dir = new File("e:\\qq");
  removeDir(dir);
 }
 public static void removeDir(File dir)
 {
  File[]files = dir.listFiles();
  for (int x = 0;x<files.length ;x++ )
  {
   if(files[x].isDirectory())
    removerDir(files[x]);
   System.out.print(files[x].toString()+"--"+files[x].delete());
  }
  System.out.println(dir+"::"+dir.delete());
 }
}

练习:将一个指定目录下的java文件的绝对路径存储到一个文本文件中建立一个java文件列表
思路:
1,对指定的目录进行递归
2,获取递归过程所得的java文件路径
3,将这些路径存储到集合中
import java.io.*;
import java.util.*;
class JavaFileList
{
 public static void main(String[]args)
 {
  File dir = new File("e:\\abc");
  List<File> list = new ArrayList<File>();
  fileToList(dir,list);
  System.out.println(list.size());
  File f = new File("e:\\java.txt");
  writeToFile(list,f.toString());
 }
 public static void fileToList(File dir,List<File> list)
 {
  File[] files = dir.listFiles();
  for(File file:files)
  {
   if(file.isDirectory())
    fileToList(file,list);
   else
   {
    if(file.getName().endsWith(".java"))
    list.add(file);
   }
  }
 }
 public static void writeToFile(List<File> list,String filess)
 {
  BufferedWriter buw = null;
  try
  {
   buw = new BufferedWriter(new FileWriter(filess));
   for(File fs:list)
   {
    String path = fs.getAbsolutePath();
    buw.write(path);
    buw.newLine();
    buw.flush();
   }
  }
  catch (IOException e)
  {
   throw new RuntimeException("错误");
  }
  finally
  {
   try
   {
    if(buw!=null)
     buw.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("失败");
   }
  }
 }
}

Properties是Hashtable的子类具备Map集合的特点里面键值对都为字符串无泛型,
是集合中和IO技术结合的集合容器 对象特点:可以用键值对形式配置文件
import java.io.*;
import java.util.*;
class PropertiesDemo
{
 public static void main(String[]args)
 {
   setAndGet();
 }
 public static void setAndGet()
 {
  Properties prop = new Properties();
  prop.setProperty("lise","24");存值
  prop.setProperty("xiao","27");
  prop.setProperty("lise","29");修改
  Set<String> names = prop.stringPropertyNames();将键存入Set集合中
  for(String name:names)
  {
   System.out.println(name+"--"+prop.getProperty(name));获取键所对应的值
  }
  System.out.println(value);
 }
}
将info.txt中的键值数据存入到集合中
思路:1,用一个流和info.txt文件关联 2,读取一行数据,将该行数据用"="切割 3,"="左右键值存入集合
Properties提供的load(流对象file);可以直接将文件中的数据加载进集合中.list(System.out);打印出集合元素列表 
prop.store(fos,"haha");方法应用:FileOutputStream fos = new FileOutputStream("info.txt");此时store方法将集合内容重新存入文件"haha"为一个标记
import java.util.*;
import java.io.*;
class Demo
{
 public static void main(String[]args)throws IOException
 {
  jianzhi();
 }
 public static void jianzhi()throws IOException
 {
  BufferedReader buf = new BufferedReader(new FileReader("info.txt"));
  String line = null;
  Properties prop = new Properties();
  while((line=buf.readLine())!=null)
  {
   String[]str = line.split("=");
   prop.setProperty(str[0],str[1]);
  }
  System.out.println(prop);
  buf.close();
 }
}
记录应用程序运行次数,次数到达时给出提示
运用计数器,程序结束计数器的值依然存在,下次启动继续存值
建立一个配置文件记录该软件运行次数
以键值对的形式便于阅读与操作,用Map集合承装,以文件形式存储使用到io技术即Properties
import java.io,*;
import java.util.*;
class Demo
{
 public static void main(String[]args)throws IOException
 {
  Properties prop = new Properties();
  File file = new File("info.ini");
  if(!file.exists())
   file.createNewFile();
  FileInputStream fis = new FileInputStream(file);
  prop.load(fis);
  int count = 0;
  String value = prop.getProperty("time");
  if(value!=null)
  {
   count = Integer.parseInt(value);
   if(count>=5)
   {
    System.out.println("次数已到!");
    return;
   }
  }
  count++;
  prop.setProperty("time",count+"");
  FileOutputStream fos = new FileOutputStream(file);
  prop.store(fos,"");
  fos.close();
  fis.close();
 }
}

打印流:提供打印方法,可以将各种数据类型的数据都原样打印
字节打印流:PrintSream 构造函数可以接收的参数类型:
1,File对象.File 2,字符串路径.String 3,字节输出流OutputStream

字符打印流:PrintWriter构造函数可以接收的参数类型:
1,File对象,File 2,字符串路径.String 3,字节输出流.OutputStream 4,字符输出流,Writer
import java.io.*;
class PrintStreamDemo
{
 public static void main(String[]args)throws IOException
 {
  BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
  PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);自动刷新功能为ture 自能刷新流对象
  String line = null;
  while ((line = buf.readLine())!=null)
  {
   if("over".equals(line))
    break;
   out.println(line.toUpperCase());println自持上面的自动刷新
  }
   out.close();
   buf.close();
 }
}
合并流:将多个文件进行关联
import java.io.*;
import java.util.*;
class SequenceDemo
{
 public static void main(String[]args)throws IOException
 {
  Vector<FileInputStream> v = new Vector<FileInputStream>();
  v.add(new FileInputStream("c:\\1.txt"));
  v.add(new FileInputStream("c:\\2.txt"));
  v.add(new FileInputStream("c:\\3.txt"));
  Enumeration<FileInputStream> en = v.elements();枚举方法
  SequenceInputStream sis = new SequenceInputStream(en);
  FileOutputStream fis = new FileOutputStream("c:\\4.txt");
  byte[]buf = new byte[1024];
  int len = 0;
  while ((len=sis.read(buf))!=-1)
  {
   fos.write(buf,0,len);
  }
  fos.close();
  sis.close();
 }
}

切割文件并再次合并:
import java.io.*;
import java.util.*;
class SplitFile
{
 public static void main(String[]args)throws IOException
 {
  splitFile();
  heliu();
 }
 public static void splitFile()throws IOException 切割
 {
  FileInputStream fis = new FileInputStream("ppq.jpg");
  FileOutputStream fos = null;
  byte[]buf = new byte[1024*1024];
  int len = 0;
  int count=1;
  while ((len=fis.read(buf))!=-1)
  {
   fos=new FileOutputStream("e:\\abc\\a\\"+(count++)+".part");
   fos.write(buf,0,len);
   fos.close();
  }
  fis.close();
 }
 public static void heliu()throws IOException 合并
 {
  ArrayList<FileInputStream> v = new ArrayList<FileInputStream>();
  for(int x=1;x<=3;x++)
  {
   v.add(new FileInputStream("e:\\abc\\a\\"+x+".part"));
  }
  final Iterator<FileInputStream> it = v.iterator();
  Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
  {
   public boolean hasMoreElements()
   {
    return it.hasNext();
   }
   public FileInputStream nextElement()
   {
    return it.next();
   }
  };
  SequenceInputStream sis = new SequenceInputStream(en);
  FileOutputStream fos = new FileOutputStream("e:\\abc\\a\\po.jpg");
  byte[]buf = new byte[1024];
  int len = 0;
  while ((len=sis.read(buf))!=-1)
  {
   fos.write(buf,0,len);
  }
  sis.close();
  fos.close();
 }
}

 

原创粉丝点击