集合与流

集合与流

Collection(集合) API
Set:一个无序无重复;List:一个有序可重复。

Iterators迭代器
如:
List list = new ArrayList();
Iterators elements = list.iterator();
while(elements.hasNext()) {
      System.out.println(elements.next());
}
Vector向量
转换成枚举类型
Enumeration enum1 = p.elements();
while(enum1.hasMoreElements()) {
      name = (String)enum1.nextElement();
      System.out.println(name);
}
Hashtable 放入“键-值”关系对象。
put(参数1,参数2)
Enumeration enum1 = hash.keys();
Object obj;
while(enum1.hasMoreElements()) {
      obj = enum1.nextElement();
      System.out.println(obj+":"+hash.get(obj));
}


Java流
输入/输出源抽象为“流”,16位字符流。
字节流:InputStream和OutputStream。
字符流:Reader和Writer。
数据类型分节点流(低级流)和处理流(高级流),高级流和低级流联系起来使用,低级流和输入/输出设备关联。
System.exit(0)是正常退出,System.exit(1)是非正常退出。


可以通过FileInputStream和FileOutputStream来实现文件的拷贝。
如:
package com.sinojava.one;
import java.io.*;
/*
   文件拷贝,将一个文件中的内容拷贝到另一个文件中
*/
public class CopyFile
{
       public boolean copyFile(String src,String des)
       { 
           File srcFile,desFile;
           srcFile = new File(src);
           desFile = new File(des);
           FileInputStream fis = null;
           FileOutputStream fos = null;
 
           try{
                desFile.createNewFile();
                fis = new FileInputStream(srcFile);
                fos = new FileOutputStream(desFile);
                int bytesRead;
                byte[] buf = new byte[4 * 1024];  // 4K buffer
                while((bytesRead=fis.read(buf))!=-1){
                     fos.write(buf,0,bytesRead);  //0到bytesRead字节
                }
                fos.flush();
                fos.close();
                fis.close();
            }catch(IOException e){
                   System.out.println(e);
                   return false;
              }
             return true; 
          } 
          public static void main(String args[])
          {
                 CopyFile cf = new CopyFile();
                 String src = args[0];
                 String des = args[1];
                 if(cf.copyFile(src,des))
                 {
                        System.out.println("拷贝成功!");
                 }
                 else
                 {
                        System.out.println("拷贝失败!");
                 }  
             }
      }


缓冲流:对节点流封装,起缓冲作用,提高读写效率。
流的几种经典流向:
A-file---(bytes)FileInputStream---(bytes)DataInputStream---(String) .
A-file---FileInputStream---BufferedInputStream---DataInputStream .
A-file---FileReader---BufferedReader .


重定向标准输入/输出,使用System.setIn()和System.setOut()来改变设备。


RandomAccessFile 特殊文件流
它的接口是Data Input 和 Data Output。
有两个构造方法:
RandomAccessFile(File file,String mode)
RandomAccessFile(String file,String mode)


编码的转换(中文出现乱码现象)
如:
package com.sinojava.one;
import java.io.*;
public class AppendFile
{
    public static void main(String[] args) {
            String toAppend = args[0];   //从命令行随意输入字符
            try{
            int i = 0;
            String record = new String();
            String toCn = null;
            //处理中文问题
            toCn = new String(toAppend.getBytes("GBK"),"ISO8859_1"); //将其转换为ISO8859_1格式
      
            RandomAccessFile rf1 
            = new RandomAccessFile("c:/toAppend.txt","rw");   //rw是固定写法,表示读写操作
            rf1.seek(rf1.length());  //返回的是文件的长度
            rf1.writeBytes(toCn+"\n");   //给文件以字节的形式写入字符串
            rf1.close();
    
            RandomAccessFile rf2 = new RandomAccessFile("c:/toAppend.txt","r");  //设置从toAppend.txt中读内容
            String outCn = null;
            while ((record = rf2.readLine()) != null) 
            {
                    i ++;
                    //处理中文问题
                    outCn = new String(record.getBytes("ISO8859_1"),"GBK");                                                                      //把文件中的ISO8859_1编码格式转换为GBK格式
        
                    System.out.println("Line "+i+":"+outCn);  //最后将读出来的内容打印到命令控制台上
            }
            rf2.close();
            }catch(Exception e)
            {
                   e.printStackTrace(); 
            }  
      }
}

你可能感兴趣的:(集合与流)