Java String类与IO类

一、常用的实用类String类
    
    1、String类在java.lang包中,是Java专门提供用来处理字符串的类,由于java.lang包中的类是默认被引入的,因此程序可以直接使用String类。
       String类用来创建一个字符串变量,字符串变量是对象。
    
    2、构造字符串对象
        (1)、常量对象:字符串常量对象是用双引号括起来的字符序列,例如:"你好"、"12.97"、"boy"等。
        (2)、字符串对象:
            声明:String s;
            创建字符串对象:s = new String("we are students");
            或者用一个已创建的字符串创建另一个字符串,例如: String tom = new String(s);
            String 类常用构造方法: String (char a[]);   String (char a[],int startIndex,int count);    
        (3)、引用字符串常量对象
            String s1,s2;
            s1 = "How are you";  s2 = "How are you";
            这样,s1,s2具有相同的引用,因此具有相同的实体。        
    3、常用方法
        (1)、public int length(); //获取一个字符串的长度
        (2)、public boolean equals(String s);//比较当前字符串对象的实体是否跟s指定的字符串实体相同。
        (3)、public boolean startWith(String s)
             public boolean endsWith(String s);  判断当前字符串对象的前缀(后缀)是否是参数s指定的字符串
        (4)、public boolean contains(String s); 判断当前字符串对象是否含有字符串s
        (5)、public int indexOf(String s); 从当前字符串的头开始检索字符串s,并返回首次出现s的位置。
             public indexOf(String s, int startpoint);  从当前字符串startpoing位置开始,检索s首次出现的位置
             public lastIndexOf(String s); 从当前字符串的头开始,检测s最后出现的位置。
        (6)、public String substring(int startpoint);获取一个当前字符串的子串
             相关方法: public substring(int start,int end);
        (7)、public String trim (); //得到一个s去掉前后空格后的字符串对象。
    
    4、字符串与基本数据类型的转换
        (1)、java.lang 包中的Integer类调用其类方法public static int parseInt(String s);可以将由"数字"字符组成的字符串如"12345",转换成int类型数字。
        (2)、类似的,使用java.lang包中的Byte、Short、Long、Float、Double类调用相应的类方法可以将由"数字"字符组成的字符串,转化为相应的基本数据类型。
        (3)、可以使用String类的类方法public static String valueOf(byte n)等将形如123、123.456等数值转换为字符串。

    5、字符串与字符、字节数组
        (1)、字符串与字符数组
            String类的构造方法
            String(char [])和String(char [],int offset,int length)
            分别用字符数组中的全部字符和部分字符创建字符串对象
           将字符串中的全部字符存放在一个字符数组中的方法
            public char[] toCharArray();
        (2)、字符串与字节数组
            String(byte[])用指定的字节数组构造一个字符串对象。
            String(byte[],int offset,int length);用指定的字节数组的一部分,即从数组起始地址offset开始取length个字节构造一个字符串对象
            public byte[] getBytes() 方法使用平台默认的字符编码,将当前字符串转化为一个字节数组
            public byte[] getBytes(String charsetName)  使用参数指定的字符编码,将当前字符串转化为一个字节数组。

二、常用实用类StringBuffer类
    1、String字符串不能修改、删除或替换字符串中的某个字符,即String 对象一旦创建,那么实体是不可以再发生变化的,例如:
        String s = new String("我喜欢散步"); //之后"我喜欢散步"对应的内存地址里的内容不会发生改变
        虽然可以  s = "我喜欢打球"; 的操作,但是只是改变了s指向的内存空间,原来的内存里的东西没有发生改变。
    2、StringBuffer类创建可修改的字符串序列,也就是说,该类对象的实体的内存空间可以改变大小。

    3、StringBuffer类构造方法:
        有三个构造方法:
        (1)、 StringBuffer(); 创建一个StringBuffer对象,分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的容量自动增加。
        (2)、StringBuffer(int size); 分配给该对象实体的初始容量大小是size指定的字符个数,当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量自动增加。
        (3)、StringBuffer(String s); 分配给该对象的实体的初始容量为参数字符串s的长度额外再加16个字符,当该对象的实体存放的字符序列长度大于这些时,实体的容量自动增加。

        常用方法:
        (1)、StringBuffer append(String s)将一个字符串对象追加到当前StringBuffer对象中
             StringBuffer append(int n)将int类型数据转化为字符串对象之后再追加到当前StringBuffer对象中,类似的还有StringBuffer append(long n)等
             StrinBuffer append(Object o)将Object对象的字符串追加到当前StringBuffer对象中 
        (2)、public char charAt(int n); 得到参数n指定的位置上的单个字符
             public void setChar(int n,char ch);将StringBuffer对象实体中的字符串位置n处的字符用参数ch替换。
        (3)、StringBuffer insert(int index,String str);将参数str指定的字符串插入到参数index指定的位置。
        (4)、public StringBuffer reverse() 将该对象实体中的字符反转
        (5)、StringBuffer delete(int startIndex,int endIndex);从当前StringBuffer对象实体中的字符串中删除一个字符串
             deleteCharAt(int index)删除当前StringBuffer对象实体的字符串中index位置处的一个字符
        (6)、StringBuffer replace(int startIndex,int endIndex ,String str);将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换(前闭后开)。

三、IO之File类
    1、输入流和输出流
        输入、输出流提供一条通道程序,可以使用这条通道读取源中的数据或者把数据传送到目的地。
        把输入流的指向称作源,程序从指向源的输入流中读取源中的数据。
        而输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把数据传送到目的地。
    2、File类  File既可以当作一个文件,又可以当作一个目录
        File对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。
        创建一个File对象的构造方法有三个:
        File(String filename);
        File(String directoryPath,String filename);
        File(File f,String filename);
    3、文件的属性:
        public String getName()获取文件的名字
        public boolean canRead() 判断文件是否可读
        public boolean canWrite()判断文件是否可写
        public boolean exits()判断文件是否存在
        public long length()获取文件的长度(字节数)
        public String getAbsolutePath()获取文件的绝对路径
    4、文件的创建和删除
        当使用File类创建一个文件对象后,例如  File file = new File("c:\\myletter","letter.txt");
        (1)、如果c:\\myletter 目录中没有名字为letter.txt文件,文件对象file调用方法public boolean createNewFile()可以在c:\\myletter目录中创建一个letter.txt文件
        (2)、文件对象调用方法 public boolean delete()可以删除当前文件,例如:file.delete();

    5、目录    
        (1)、创建目录  public boolean mkdir()
        (2)、列出目录中的文件
            public String[] list() 用字符串形式返回目录下的全部文件
            public File [] listFiles() 用file对象形式返回目录下的全部文件
            public String[] list(FilenameFilter obj)用字符串形式返回目录下制定类型的所有文件
            public File[] listFiles(FilenameFilter obj)用File对象形式返回目录下的指定类型的所有文件
        (3)、上述两方法的参数FilenameFilter 是一个接口,该接口有一个方法 public boolean accept(File dir,String name);

        
四、IO之字节流和字符流
    
    1、java.io包提供了大量的流类,Java把InputStream抽象类的子类创建的流对象称作字节输入流,OutputStream抽象类的子类创建的流对象称为字节输出流,Java把Reader抽象类的子类
       创建的流对象称为字符输入流,Writer抽象类的子类创建的流对象称为字符输出流。
       针对不同的源或目的地,java.io包为程序提供了相应的输入流或输出流,这些输入、输出流绝大部分都是InputStream、OutputStream、Reader、Writer的子类。
    
    2、InputStream类与OutputStream类
       InputStream类提供的read方法以字节为单位顺序的读取源中的数据,只要不关闭流,每次调用read方法就顺序地读取源中的其余内容,直到源的末尾或输入流被关闭。
       InputStream类中如下常用方法
         int read()
         int read(byte b[])
             int read(byte b[],int off,int len)
         void close()
         long skip(long numBytes)
      
      OutputStream流以字节为单位顺序地写进文件,只要不关闭流,每次调用write方法就顺序地向目的地写入内容,知道流被关闭
      InputStream类中有如下常用的方法
        void write(int n)
        void write(int b[])
        void write(byte b[],int off,int len)
        void close()

    3、Reader类与Writer类
          Reader 类提供的方法read以字符为单位顺序地读取源中的数据
             int read()
                 int read(byte b[])
                      int read(byte b[],int off,int len)
                  void close()
                  long skip(long numBytes)
    
        Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容,知道流被关闭
             void write(int n); 写一个字符
                 void write(char b[])
                 void write(char b[],int off,int len)
                 void close()

    4、关闭流
        通过调用close方法,可以保证操作系统把流缓冲区的内容写入到他的目的地,即关闭输出流可以把该流所用的缓冲区的内容冲洗掉。

五、IO之文件字节流
    1、InputStream专门提供了读写文件的子类:FileInputStream和FileOutputStream类,如果程序对文件的操作比较简单,可以使用FileInputStream和FileOutputStream类创建的流
    对文件进行读写操作。
    2、FileInputStream类创建的对象被称作为字节输入流
        构造方法:
        FileInputStream(String name);
        FileInputStream(File file);
    读取一个hello.txt的文件
        try {  FileInputStream in = new FileInputStream("hello.txt");}
                catch (IOException e){Sysotem.out.println("read error");}

         read 方法以字节为单位读取文件
             int read()  //读到文件尾部返回-1
                 int read(byte b[])
                      int read(byte b[],int off,int len)        
    3、FileOutputStream类创建字节输出流
        构造方法:
           FileOutputStream(String name)
           FileOutputStream(File file)
        以字节为单位写文件
          FileOutputStream流的目的地是文件,所以文件输出流调用write(byte n[])把字节写入文件

六、IO之文件字符流
    
     1、FileReader和FileWriter用来创建文件字符输入、输出流,构造方法:
        FileReader(String filename);
        FileReader(File filename);
        FileWriter(String filename);
        FileWriter(File filename);
    2、字符输入流和输出流的read()和write()方法以字符为基本单位处理数据
 七、IO之缓冲流
    
    1、BufferedReader和BufferedWriter类创建的对象称作缓冲输入、输出流,二者的源和目的地必须是字符输入流和字符输出流,构造方法:
        BufferedReader(FileReader in);
        BufferedWriter(FileWriter out);
    2、BufferedReader和BufferedWriter类读写文件的方法:
        readLine() BufferedReader流读取文本行
        write(String s,int off,int len);BufferedWriter流把字符串s写到文本中
        newLine();BufferedWriter向文件写入一个回车符。

public static String loadAFileToStringDE1(File f) throws IOException { long beginTime = System.currentTimeMillis(); InputStream is = null; String ret = null; try { is = new BufferedInputStream( new FileInputStream(f) ); long contentLength = f.length(); ByteArrayOutputStream outstream = new ByteArrayOutputStream( contentLength > 0 ? (int) contentLength : 1024); byte[] buffer = new byte[4096]; int len; while ((len = is.read(buffer)) > 0) { outstream.write(buffer, 0, len); } outstream.close(); ret = outstream.toString(); //byte[] ba = outstream.toByteArray(); //ret = new String(ba); } finally { if(is!=null) {try{is.close();} catch(Exception e){} } } long endTime = System.currentTimeMillis(); System.out.println("方法1用时"+ (endTime-beginTime) + "ms"); return ret; } public static String loadAFileToStringDE2(File f) throws IOException { long beginTime = System.currentTimeMillis(); InputStream is = null; String ret = null; try { is = new FileInputStream(f) ; long contentLength = f.length(); byte[] ba = new byte[(int)contentLength]; is.read(ba); ret = new String(ba); } finally { if(is!=null) {try{is.close();} catch(Exception e){} } } long endTime = System.currentTimeMillis(); System.out.println("方法2用时"+ (endTime-beginTime) + "ms"); return ret; } public static String loadAFileToStringDE3(File f) throws IOException { long beginTime = System.currentTimeMillis(); BufferedReader br = null; String ret = null; try { br = new BufferedReader(new FileReader(f)); String line = null; StringBuffer sb = new StringBuffer((int)f.length()); while( (line = br.readLine() ) != null ) { sb.append(line).append(LINE_BREAK); } ret = sb.toString(); } finally { if(br!=null) {try{br.close();} catch(Exception e){} } } long endTime = System.currentTimeMillis(); System.out.println("方法3用时"+ (endTime-beginTime) + "ms"); return ret; } 3个方法去读取一个大于50M的文件,当不设置jvm参数时都OutofMemery,当设置-Xmx128M时。只有方法3 可以通过,设置到-Xmx256M时也只有方法3可以通过,干脆设置512M,都可以了,运行时间如果正常的话一般都在4~5S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值