zoukankan      html  css  js  c++  java
  • Java IO流

    一、java常用编码方式

    要讨论输出输入流,就不得不说java的编码,java使用的编码方式有:gbk、UTF-8、UTF-16、IOS-8859-1、US-ASCII等。常用的为gbk和UTF-8.

    1、gbk编码中文占用2个字节,英文占用1个字节(java默认编码)

     1 public class javaTest2  {
     2 
     3 public static void main(String[] args)  {
     4 
     5     String s="小帅哥ABC";
     6     byte []byte1=s.getBytes();
     7     for (byte b : byte1) {
     8         System.out.print(b+" ");
     9     }
    10   }
    11 }

    运行结果:

     1 -48 -95 -53 -89 -72 -25 65 66 67  

            小      帅     哥     A  B   C

    2、在utf-8编码下中文占用3个字节,英文占用一个字节

     1 import java.io.UnsupportedEncodingException;
     2 
     3 public class javaTest2  {
     4 
     5 public static void main(String[] args) throws UnsupportedEncodingException  {
     6 
     7     String s="小帅哥ABC";
     8     byte []byte1=s.getBytes("UTF-8");
     9     for (byte b : byte1) {
    10         System.out.print(b+" ");
    11     }
    12   }
    13 }

    运行结果:

     1 -27 -80 -113 -27 -72 -123 -27 -109 -91 65 66 67  

              小             帅         哥       A  B   C

    3、java双字节编码不管是中文还是英文都是两个字节

     1 import java.io.UnsupportedEncodingException;
     2 
     3 public class javaTest2  {
     4 
     5 public static void main(String[] args) throws UnsupportedEncodingException  {
     6 
     7     String s="小帅哥ABC";
     8     byte []byte1=s.getBytes("UTF-16be");
     9     for (byte b : byte1) {
    10         System.out.print(b+" ");
    11     }
    12   }
    13 }

    运行结果:

     1 92 15 94 5 84 -27 0 65 0 66 0 67  

           小   帅    哥    A    B    C

    注:当你的字节序列是某种编码时,这是想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码~

     1 import java.io.UnsupportedEncodingException;
     2 
     3 public class javaTest2  {
     4 
     5 public static void main(String[] args) throws UnsupportedEncodingException  {
     6 
     7     String s="小帅哥ABC";
     8     System.out.println("s:"+s);
     9     byte []byte1=s.getBytes("UTF-16be");
    10     for (byte b : byte1) {
    11         System.out.print(b+" ");
    12     }
    13     System.out.println();
    14     //字节序列的时候用的是UTF-16be编码方式,字节序列转字符串时用的是gbk(默认)
    15     String s1=new String(byte1);
    16     System.out.println("s1:"+s1);
    17     
    18     //字节序列的时候用的是UTF-16be编码方式,字节序列转字符串时用的是UTF-16be
    19     String s2=new String(byte1,"UTF-16be");
    20     System.out.println("s2:"+s2);
    21   }
    22 }

    运行结果:
     1 s:小帅哥ABC

    2 92 15 94 5 84 -27 0 65 0 66 0 67

    3 s1:^T?

    4 s2:小帅哥ABC 

    二、关于io流的一些基础知识,找到一些写的比较好的博客:

    http://blog.csdn.net/hguisu/article/details/7418161

    关于字节流和字符流的转换(关于InputStreamReader 和 OutputStreamWriter类用法)

    http://blog.csdn.net/liuhenghui5201/article/details/8292552

    关于管道流(PipedInputStream和PipedOutputStream,PipedReader和PipedWriter类用法)

    http://www.cnblogs.com/chinareny2k/archive/2010/03/24/1693878.html

    关于序列化和反序列化(ObjectInputStream和ObjectOutputStream类的使用)

    http://blog.csdn.net/wangloveall/article/details/7992448/

    三、File类

    构造函数

    代码如下:

     1 public class FileDemo {
     2      public static void main(String[] args){
     3          //构造函数File(String pathname)
     4          File f1 =new File("c:\abc\1.txt");
     5          //File(String parent,String child)
     6          File f2 =new File("c:\abc","2.txt");
     7          //File(File parent,String child)
     8          File f3 =new File("c:"+File.separator+"abc");//separator 跨平台分隔符
     9          File f4 =new File(f3,"3.txt");
    10          System.out.println(f1);//c:abc1.txt
    11 
    12      }
    13 
    14  }

     

    创建方法

    1.boolean createNewFile() 不存在返回true 存在返回false
    2.boolean mkdir() 创建目录
    3.boolean mkdirs() 创建多级目录

    删除方法(删除目录时,需要先删除目录下的文件,利用递归的思想来解决)

    1.boolean delete()
    2.boolean deleteOnExit() 文件使用完成后删除

    代码如下:

     1 import java.io.File;
     2 import java.io.IOException;
     3 public class FileDemo2 {
     4     public static void main(String[] args){
     5         File f =new File("d:\1.txt");
     6         try {
     7             System.out.println(f.createNewFile());//当文件存在时返回false
     8             System.out.println(f.delete());//当文件不存在时返回false
     9         } catch (IOException e) {
    10             // TODO Auto-generated catch block
    11             e.printStackTrace();
    12         }
    13     }
    14 }

     



    判断方法

    1.boolean canExecute()判断文件是否可执行
    2.boolean canRead()判断文件是否可读
    3.boolean canWrite() 判断文件是否可写
    4.boolean exists() 判断文件是否存在
    5.boolean isDirectory() 
    6.boolean isFile()
    7.boolean isHidden()
    8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断

    获取方法

    1.String getName()
    2.String getPath()
    3.String getAbsolutePath()
    4.String getParent()//如果没有父目录返回null
    5.long lastModified()//获取最后一次修改的时间
    6.long length()
    7.boolean renameTo(File f)
    8.File[] liseRoots()//获取机器盘符
    9.String[] list() 
    10.String[] list(FilenameFilter filter)
    列出磁盘下的文件和文件夹

    代码如下:

     1 public class FileDemo3 {
     2      public static void main(String[] args){
     3          File[] files =File.listRoots();
     4          for(File file:files){
     5              System.out.println(file);
     6              if(file.length()>0){
     7                  String[] filenames =file.list();
     8                  for(String filename:filenames){
     9                      System.out.println(filename);
    10                  }
    11              }
    12          }
    13      }
    14 
    15  }

     


    文件过滤

    代码如下:
     1 import java.io.File;
     2  import java.io.FilenameFilter;
     3  public class FileDemo4 {
     4      public static void main(String[] args){
     5          File[] files =File.listRoots();
     6          for(File file:files){
     7              System.out.println(file);
     8              if(file.length()>0){
     9                  String[] filenames =file.list(new FilenameFilter(){
    10                      //file 过滤目录 name 文件名
    11                      public boolean accept(File file,String filename){
    12                          return filename.endsWith(".mp3");
    13                      }
    14                  });
    15                  for(String filename:filenames){
    16                      System.out.println(filename);
    17                  }
    18              }
    19          }
    20      }
    21 
    22  }

     




    File[]  listFiles()

    File[] listFiles(FilenameFilter filter)

    利用递归列出全部文件

    代码如下:
     1 public class FileDemo5 {
     2     public static void main(String[] args){
     3         File f =new File("e:\音樂");
     4         showDir(f);
     5     }
     6     public static void showDir(File dir){
     7         System.out.println(dir);
     8         File[] files =dir.listFiles();
     9         for(File file:files){
    10             if(file.isDirectory())
    11                 showDir(file);
    12             else 
    13                 System.out.println(file);
    14         }
    15     }
    16 }

     

    移动文件

    找出d盘下所有的 .java 文件,拷贝至 c:jad 目录下,并将所有文件的类型由.java 修改为.jad 。

    代码如下:

     1 public class Test5 {
     2     public static void main(String[] args){
     3         File f1 = new File("d:\");
     4         moveFile(f1);
     5     }
     6 public static void moveFile(File dir){
     7     File[] files=dir.listFiles();
     8     for(File file:files){
     9         if(file.isDirectory())
    10             moveFile(file);
    11         else{
    12             if(file.getName().endsWith(".java"))
    13                 file.renameTo(new File("c:\jad\"+
    14             file.getName().substring(0,file.getName().lastIndexOf('.'))+".jad"));
    15             }
    16         }
    17     }
    18 }

     四、RandomAccessFile类

    RandomAccessFile是java提供的对文件内容的访问类,既可以读文件,也可以写文件。RandomAccessFile支持随机访问文件,可以访问文件的任意位置。

    1、构造方法表
    RandomAccessFile(File file, String mode)
              创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。
    RandomAccessFile(String name, String mode)
              创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。

    找到一个写的不错的博客:

    http://blog.csdn.net/akon_vm/article/details/7429245

  • 相关阅读:
    Java 书籍 Top 10
    maven学习笔记
    Extjs study
    初学spring mvc
    spring context:componentscan (转)
    What is AspectJ(转)
    java concurrency 学习
    (转)深入浅出REST
    icloud不用翻就能显示地图的办法(转)
    OSGi知识
  • 原文地址:https://www.cnblogs.com/xiaotiaosi/p/6385773.html
Copyright © 2011-2022 走看看