JAVA I/O操作

JAVA I/O操作

 

1.File操作

   a.创建文件:

       File file = new File();//括号内可根相应的路径参数

       File.separator用作文件夹的间隔符,这样可以考虑到windows和linux通用性;

   b.InputStream流的形式访问文件:

       BufferedInputStream in=new BufferedInputStream(new FileInputStream("TokenTest.java"));//此时转换为InputStream流       

       PrintStream out=new PrintStream(new BufferedOutputStream(
                                                     new FileOutputStream("test.java")));

       进行文件流的输出:

        int i;
        while((i=br.read())!=-1)
            System.out.println(s);
            out.close();

   c.Reader/Writer读取字符的形式获取文件://通过InputStreamReader进行转换

       BufferedReader br=new BufferedReader(new InputStreamReader(new   FileInputStream(inputfile)));

       String data;

    while((data = br.readLine())!=null)
    {
     System.out.println(data);
    }

 

      //也可直接用FileReader的形式获取

      BufferedReader br = new BufferedReader(new FileReader("TokenTest.java"));

 

    d.文件的一些操作

        创建目录:file.mkdir();//创建目录

        剪切转移文件:file.renameto(new File(temppath+list[i]))//相当于剪切文件

        显示下属文件:String[] list = file.list();

                         System.out.println(list[i]);

                         //注意字符串的操作可以用于判断文件的类型如list[i].endWith(".java")

2.进行相应的String类型的字符流操作

        import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.EOFException; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringReader; public class JavaIOTest { public static void main(String[] args) throws IOException { String s2 = "hello" + "/n" + "world"; //StringReader从memory当中读取数值 StringReader in2 = new StringReader(s2); int c; try { while ((c = in2.read()) != -1) { System.out.print((char) c); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //DataInputStream从内存取得格式化输出 try { DataInputStream in3 = new DataInputStream(new ByteArrayInputStream( s2.getBytes())); while (true) { System.out.print((char) in3.readByte()); } } catch (EOFException e) { System.out.println("End of stream"); } // PrintWriter主要为面向Byte的,以此来进行文件输出 try { String s3; BufferedReader in4 = new BufferedReader(new StringReader(s2)); PrintWriter out1 = new PrintWriter(new BufferedWriter( new FileWriter("IODemo.text"))); int lineCount = 0; while ((s3 = in4.readLine()) != null) { out1.println(lineCount++ +":"+s3); } out1.close(); } catch (EOFException e) { System.out.println("End of file Stream"); } } }

         //小结:

         //String类型即直接用StringReader转换为字符流,也可转换为字节数祖转换为DataInputStream流

 

 

3.字节流与字符流的相关介绍

      最早的JAVA 的API提供的是字节流,以InputStream和OutputStream为主,进行派生,如ObjectInputStream,DataInputStream,BufferedInputStream,FileInputStream等等

      eg:DataInputStream in=new DataInputStream(new ByteArrayInputStream(string.getbytes()));

           int i=0;

           while((i=in.read)!=-1)

                System.out.println((char)i);

      随着国际化的出现,需要更多的对国际进行支持,于是出现了Reader和Writer类型的字符处理,如StringReader,FileReader,BufferedReader,FileWriter,BufferedWriter,PrintWriter等

      eg:BufferedReader in4 = new BufferedReader(new StringReader(s2));
           PrintWriter out1 = new PrintWriter(new BufferedWriter(
           new FileWriter("IODemo.text")));

 

         在字节流和字符流之间可以实现转换

           BufferedReader br=new BufferedReader(new InputStreamReader(new   FileInputStream(inputfile)));
   String data;
    while((data = br.readLine())!=null)
    {
     System.out.println(data);
    }

 

 

4.StringTokenizer与StreamTokenizer

   a. 二者都根据一定规则(主要为分隔符或词组)获取词组

   b.StringTokenizer 与split类似,其操作如下

      String data = "I-love-you"

      StringTokenizer st = new StringTokenizer(data,"-");

      String[] list=data.split("-");

   c.StreamTokenizer较为复杂,需要设置相应的词祖范围(或者默认),在判断输出时不能为TT_EOF,并可根据相应的词组形式进行输出

       import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.StreamTokenizer; import java.util.Enumeration; import java.util.Hashtable; public class Streamtoken { public static void main(String args[]) { /*if (args.length == 0) { System.err.println("missing input filename"); System.exit(1); }*/ Hashtable wordlist = new Hashtable(); try { // FileReader fr = new FileReader("TokenTest.java"); // BufferedReader br = new BufferedReader(fr); BufferedReader br = new BufferedReader(new FileReader("TokenTest.java")); StreamTokenizer st = new StreamTokenizer(br); //StreamTokenizer st = // new StreamTokenizer(new StringReader( // "this is a test")); // st.resetSyntax(); // st.wordChars('A', 'Z'); // st.wordChars('a', 'z'); int type; Object dummy = new Object(); while ((type = st.nextToken()) != StreamTokenizer.TT_EOF) { if (type == StreamTokenizer.TT_WORD) wordlist.put(st.sval, dummy); if(type == StreamTokenizer.TT_NUMBER) System.out.println("数字为"+type); } br.close(); } catch (IOException e) { System.err.println(e); } Enumeration a=wordlist.keys(); while(a.hasMoreElements()) { System.out.println(a.nextElement()); } } }

 

   5.File的renameTo 与delete方法

      delete()直接删除,需要花费一点时间,500M大概32ms

      renameTo()方法在跨文件系统的时候会有问题,可以用FileUtil的copyFile(srcFile,destFile)文件来解决这个问题

 

 

   6.Java对象转换为字节流

       1):ByteArrayOutputStream bytes = new ByteArrayOutputStream();

   ObjectOutputStream objout = new ObjectOutputStream(bytes);

   objout.writeObject(obj);

   byte[] data = bytes.toByteArray();


       2:)byte[] data = multiSegment.read();

   ObjectInputStream objin = new ObjectInputStream(new ByteArrayInputStream(data));

   return objin.readObject();

你可能感兴趣的:(java,String,list,Stream,File,delete)