黑马学习JavaIo

来源:互联网 发布:linux mysql 启动失败 编辑:程序博客网 时间:2024/05/22 12:44

File类:.io输入与输出..键盘对应i(输入),显示器对应o(输出)

 1.file 不是文件的内容,代表磁盘文件本身信息的类    file类定义了一些与平台无关的方法来操作文件

如:增删该

2.分隔符:Unix中(/)、Dos(/),java可以处理UnixDos的路径分隔符

import java.io.*

import java.util.Date;

 

public class FileTest {

    public static void main(String[] args) throws FileNotFoundException {

 

       // TODO Auto-generated method stub

 

       File file=new File("hollo.txt");

 

       if(file.exists())

 

       {

 

           file.delete();删除文件

 

       }else

 

       {

 

           try {

 

              file.createNewFile();创建文件

 

           } catch (IOException e) {

 

               // TODO Auto-generated catch block

 

              e.printStackTrace();

 

           }

 

       }

 

        //文件名

        System.out.println("File name"+f.getName());

        //路径

        System.out.println("File path"+f.getPath());

        //绝对路径

        System.out.println("File abs path"+f.getAbsolutePath());

        //父路径..就是上一级的路径,如果没有返回null

        System.out.println("File Parent"+f.getParent());

        //文件是否存在

        System.out.println(f.exists()?"exists":"not exists");

        //文件是否可读

        System.out.println(f.canRead()?"read":"not read");

        //文件是否是目录

        System.out.println(f.isDirectory()?"directory":"not directory");

        //取出文件的修改时间。是long类型,打印的是长类型

        System.out.println("File last Modified"+f.lastModified());

        //转换格式

        System.out.println(new Date(f.lastModified()) );    }

 

}

 

RandomAccessFile类:

 

RandomAccessFile类提供了许多文件访问方法,RandomAccessFile类支持随机访问方式,可以从任意一个位置开始读取文件...,指示器,可以跳到文件的任何一个位置,移到一个新的位置,,他就会从新的位置开始读取。。

在使用流的方式的时候,,必须安顺序,一个字节一个字节的读取,,。。。随机读取,。可以跳转,

 

等长格式。。如:一条条的学生记录。。每条记录信息的内容长度一样。。。在一条信息中又可以分为若干字段。

 可以跳转到某个员工的姓名处,读取很方便

 

RandomAccessFile类仅限于操作文件。。不能访问其他的io设备,。。RandomAccessFile类有两种构造方法:

new RandomAccessFile(f"r w");//读写方式

RandomAccessFile(f,"r");     //只读方式

 

 

 

 

Io流:

 

节点流 流:字节序列的抽象概念 是指数据传送时的形态。

文件:是数据的静态存储形式(永久存储)可以被流操作io设备之一... 流:是指数据传输时的形态

 

import java.io.IOException;

 

import java.io.PipedOutputStream;

 

public class Sender extends Thread {

 

   private PipedOutputStream out=new PipedOutputStream();

 

   public PipedOutputStream getPipedOutputStream() {

 

      return out;

 

   }

 

   @Override

 

   public void run() {

 

      // TODO Auto-generated method stub

 

      String str=new String("hello this is Sender");

 

      try {

 

         out.write(str.getBytes());

 

         out.close();

 

      } catch (IOException e) {

 

         // TODO Auto-generated catch block

 

         e.printStackTrace();

 

      }    

 

   }

 

}

 

//线程中写入。

 

import java.io.IOException;

 

import java.io.PipedInputStream;

 

public class Recever extends Thread {

 

   private PipedInputStream in=new PipedInputStream();

 

   public PipedInputStream getPipedInputStream() {

 

      return in;

 

   }

 

   @Override

 

   public void run() {

 

      // TODO Auto-generated method stub

 

      byte[] chr=new byte[1024];

 

      try {

 

         int i=in.read(chr);

 

         System.out.println("收到"+new String(chr,0,i));

 

      } catch (IOException e) {

 

         // TODO Auto-generated catch block

 

         e.printStackTrace();

 

      }

 

   }

 

}

 

这个是在线程中读出

 

import java.io.ByteArrayInputStream;

 

import java.io.ByteArrayOutputStream;

 

import java.io.IOException;

 

import java.io.PipedInputStream;

 

import java.io.PipedOutputStream;

 

public class SenderAndRecevertest {

 

   public static void main(String[] args) throws IOException {

 

      // TODO Auto-generated method stub

 

      Sender sender=new Sender();

 

      Recever recever=new Recever();

 

      PipedOutputStream out=sender.getPipedOutputStream();

 

      PipedInputStream in=recever.getPipedInputStream();

 

      in.connect(out);

 

      sender.start();

 

      recever.start()

 

   }

 

}

 

 

 

 

 

 

1.节点流:

 inputStream OutputStream

 FileInputStreamFileOutputStream

 ReaderWriter

 PipedInputStreamPipedOutputStream

 ByteArrayInputStreamByteArrayOutputStream

2.流是字节序列的抽象概念(读取和写入流的方法)

 

3.流分为两个大类:节点流类和过滤流类(处理流)

对象流这个流类

输入流:程序可以从中连续读取字节的对象

inputStream类用来描述所有输入流的抽象概念(inputStream的方法int  read(),int readbyte[] b),int readbyte[] bint offint len),long skiplong n)跳过n个字节开始读取,主要用在包装流中,int avliable()返回可读的字节数、可以用作检查,void markint readlimit())

输出流:程序可以向其中连续写入字节的对象

OutputStream类用来描述所有输chu流的抽象概念

OutputStream的方法void writeint b),)

 

 

IO缓冲区、网络服务程序,记录文件,查看最好的信息,记录文件来记录过程,最后再重新演示、flush()方法可以将缓冲区中的内容刷新到硬盘

 

五:

1.(例子FileStream

 

2.ReaderWriter是所有字符流类的抽象基类,简化对字符串的输入输出编程,即用于读写文本数据

 

二进制文件与文本文件的区别

文本文件是二进制文件的一种特例,一个文件专用于存储文本字符、不存在其他的

 

 

六:

PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信

 

PipedWriterPipedReader类:

 使用管道流类,可以实现各个程序模块之间的松耦合通信

 

ByteArrayInputStreamByteArrayOutputStream

用于以IO流的方式来完成对字节数组内容的读写,来支持类似内存虚拟文件或者内存映像文件的功能

ByteArrayInputStream:ByteArrayInput(byte[]    buf)...ByteArrayInputStream(byte[],int    offset,int length);

ByteArrayOutputStream:ByteArrayOutputStream()默认是32...ByteArrayOutputStream(int)根据自己指定的

 

 

Io程序代码的复用

system.in连接到键盘,是inputStream类型的实例对象。system.out连接到显示器,是 PrintStream类的实例对象

 

 

 

数据的终止点 inputStreamrand方法返回-1,表示输入流结束

总结:从键盘上连续读取一大段数据时,应尽量将读取数据的过程放在函数中完成,使用-1来作为键盘输入的结束点。在该函数走中编写的程序代码不应直接使用System.in读取数据,而是用一个inputStream类型的形式参数对象来读取数据,然后将System.in作为实参传递给InputStream类型的形参来调用该函数

 

 

 

七:

字符编码(从io流中读取字符文本):计算机里面只有数字,字符也不例外。

a-97b-98  这种规则叫做ASCLL ASCLL的最高bit位都为0,在0-127之间

 

GBKGB2312 称为本地字符集。 中国的十六进制大陆D6D0,台湾的A4A4 、对应的中文BIG5(大五码) 《本地化系统》

 

Unicode编码:ISO(国际标准话组织)将全世界所有的符号进行了统一的编码

 

 

UTF-8编码   UTF-16编码

 

 

 

八:

字符编码的操作体验

 

 

九:字符编码

 

十一:

 

  包装类:

DataOutputStream并没对应到任何具体的流设备,一定要给它传递一个对应具体流设备的输出流对象,完成类似DataOutputStream功能的类就是一个包装类,也叫过滤流类或处理流类

 

 

BufferdInputSteam BufferdOutputSteam

增加内存缓冲区的目的:可以不只操作一个字节,提高了性能,,,使得在流上执行skipmarkreset方法成为可能。

 

 

BufferReaderreadLine方法可以一次读取一行文本,BufferWriterwriter可以向不同的系统中输入

 

 

 

 

 

十二:

 

  DataOutputstream类提供的三个写入字符串的方法:

writerBytesString s)写入一个字节

wirterCharsString s)写入一个字符,两个字节

writerUTFString str)向目标设备中写入了字符串的长度

 

DataInputStream类中只有一个readUTF方法,没有readBytesreadChars 因为要在连续流中读取字符串,没有特殊的标记,并且不知道长度,所以没有这两个方法

 

 

printSteam类提供了一系列的printprintln方法,可以将基本数据类型的数据格式化成字符串输出

 

格式化输出是什么意思?  97被格式化输出地字节数据位0x390x39

 

printWriter类,即使遇到了文本换行标识符(/n

printWriter也不会自动清空缓冲区   println方法:

 

 

 

 

 

第十三:

objectInputStream

objectOutputStream类用于从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流,,,,并且所读写的对象必须实现了Serializable接口。对象中的transientstatic类型的成员变量不会被读取和写入。

 

 

字节流与字符流的转换:

inputStreamReaderOutputStreamWriter,是用于将字节流转换成字符流来读写的两个类,InputStReader可以将一个字节流中的字节解码成字符后读取,OutputStrWriter将字符编码成字节后写入到一个字节流中。

最好不要直接使用inputStreamReaderOutputStreamWriter。要用BufferedWriter类包装OutputStreamWriter类,用BufferedReader类来包装inputSReader

 

 

 

第十四:

 

java程序与其他进程的数据通信

   java中程序中可以使用Process类的实例对象来表示子进程,子进程的标准输入和输出不再连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输出流和输入流对象上。

  调用ProcessgetOutputstreamgetInputStream方法可以获得连接到子进程的输出流和输入流对象。

 

 

第十五:

 

Decorator设计模式:在程序中用一个对象(the Decorators)包装另外一个对象

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public static void main(String[] args) throws UnsupportedEncodingException {

 

      // TODO Auto-generated method stub

 

      String str="xuyabin";

 

      for (int i = 0; i < str.length(); i++) {

 

         System.out.println(Integer.toHexString((int) str.charAt(i)));;

 

      }

 

 

 

      byte[] bytes=str.getBytes("gb2312");//编码过程  jdk字符集

 

      for (int i = 0; i < bytes.length; i++) {

 

         System.out.println(Integer.toHexString(bytes[i]));

 

      }

 

   

      for (int i = 0; i < bytes.length; i++) {

 

         System.out.write(bytes[i]);

 

      }

 

      System.out.println();

 

   }