java基础之常用类—File类和String类(重点)

来源:互联网 发布:手机淘宝详情制作软件 编辑:程序博客网 时间:2024/06/16 08:44

(一)字符串类(String类、StringBuffer类和StringBuilder类)

一、String类

1、String类构造方法

String(byte[ ]  bytes, String  charsetName):使用指定编码集解码一个字节数组,构造一个新的字符串。

String(String  original):初始化一个新创建的String对象。

String(char[ ]  value):构造一个新的String对象,使其表示字符串数组所包含的字符序列。

2、常用方法

getBytes() :使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

getBytes(Charset charset) :使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。

indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。 

lastIndexOf(String str) :返回指定子字符串在此字符串中最右边出现处的索引。

split(String regex):指定正则表达式来拆分字符串,返回一个字符串数组。

substring(int beginIndex):从指定位置开始,截取一个新的字符串。

toLowerCase() :使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

matches(String regex):字符串是否匹配给定的正则表达式

String对象是不可变的。相当于字符串常量,定义分配空间赋值之后无法改变。

String  s1 = "hello";            s1=  "world";

注意:s1是String对象的引用,不是对象本身。这里的变量是String对象的引用。

char data[] = {'a', 'b', 'c'};String str = new String(data);  //这里str才是对象本身,不是引用。注意String的构造方法,参数是一个字符数组。
注意:String类重写了equals()方法,比较的是内容不是引用的地址。与Object类区分开

1、对于String类的方法

可以思考对数组的操作,可以进行哪些操作,需要哪些方法。最基本的四个方法:增删改查,分解split(String  s),连接concat(String  s)

getBytes()方法:使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

subString(int  begin,int  end)方法:返回一个新的字符串

静态方法:valueOf(int   i)返回i的字符串形式,其他数据类型与之类似


二、StringBuffer类

StringBuffer是线程安全的可变字符序列。因此,对字符串进行修改时,需要使用StringBuffer类和StringBuilder类。

注意:与String不同,StringBuffer和StringBuilder对象能够被多次修改,并且不产生新的对象。

1、StringBuffer类的方法(其他方法与String类似

序号方法描述1public StringBuffer append(StringBuffer s)
将指定的字符串追加到此字符序列。   注意返回的也是StringBuffer类型,添加其他类型数据,系统会隐式调用String.valueOf(char[])方法或者引用类型的toString()方法转化为字符串,在添加。2public StringBuffer reverse()
 将此字符序列用其反转形式取代。3public delete(int start, int end)
移除此序列的指定的子字符串中的字符。4public insert(int offset, String  s )
将 字符串s插入此序列的指定位置。5replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的指定位置的子字符串中的字符。

(三)StringBuilder类

StringBuilder 类在 Java 5 中被提出,同时,StringBuilder类不是线程安全的。StringBuilder类比StringBuffer类速度快,在单线程下,建议使用StringBuilder类。


(四)基本数据包装类

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。

Character 类在对象中包装一个基本类型 char 的值

在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。

编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。

例如:Integer  x  = 5;当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。(内部编译器调用的是Integer类的Integer.valueOf(5)方法,完成装箱,拆箱调用的是Integer.intValue()方法)


(五)Math类(在图形和游戏中会常用到Math类的方法)

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

注意:方法的参数和返回值类型一般是double类型。

其中一个方法要注意:可以用来产生随机数

public static double random()
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0


(六)File类(重点)

读写一个文件:

1、首先获取这个文件,获取该文件的路径加文件名:String path = getPath()+File.separator+getName()

2、利用File类,通过File类的构造方法获得文件对象,构造方法:File(String directoryPath, String filename)或者File(File dirObj, String filename)

3、利用节点流来读写文件的内容,FileInputStream(File  file)或者FileInputStream(String  filename)

  1.   File file = new File ("hello.txt");
  2.   
  3.   FileInputStream in=new FileInputStream(file); 
  4.   
  5.   InputStreamReader inReader=new InputStreamReader(in,"utf-8");  
  6.  
  7.   BufferedReader bufReader=new BufferedReader(inReader); 

    1. InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));
    2.    
    3.   while((ch = isr.read())!=-1)   
    4.   {   

    5.    System.out.print((char)ch);   

    6.   }  

    File类直接处理文件和文件系统,File对象用来处理或获取与磁盘文件相关的信息。

    1、区分开File类和FileInputStream类

    FileInputStream类关注的是文件内容,而File类关注的是文件在磁盘上的存储。

    File不属于文件流,只能代表一个文件或是目录的路径名而已。

    注意:如果处理文件或者目录名,就应该使用File对象,而不是字符串。例如,File类的equals方法知道一些文件系统对大小写是敏感的,目录尾的“/”字符无关紧要。


    File类是文件和路径的抽象表示形式。这里可以表示一个目录路径名(文件夹的名字),也可以表示一个文件对象。

    其中文件夹就是一个目录名称。

    isFile()方法:测试此抽象路径名表示的文件是否是一个标准文件。

    isDirectory()方法:测试此抽象路径名表示的文件是否是一个目录。

    通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表,这里返回的是字符串

     listFiles():返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。返回的是File[]数组

    1、File类的构造方法

    下面的构造函数可以用来生成File 对象:
    File(String directoryPath)
    File(String directoryPath, String filename)
    File(File dirObj, String filename)
    这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象。下面的例子创建了三个文件:f1,f2,和f3。第一个File对象是由仅有一个目录路径参数的构造函数生成的。第二个对象有两个参数——路径和文件名。第三个File对象的参数包括指向f1文件的路径及文件名。f3和f2指向相同的文件。
    File f1 = new File("/");
    File f2 = new File("/","autoexec.bat");
    File f3 = new File(f1,"autoexec.bat");

    public  File(String  pathname):pathname为路径创建File对象。

    注意:这里的构造方法是在内存中构造一个File对象,而不是在硬盘上创建一个指定路径的文件。

    public  File(String  parent ,String child): 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

    2、File类有一个静态属性:static   String  separator 存储了当前系统的路径分隔符。就是正斜杠( / ),为了跨平台使用。

    注意:windows下是反斜杠     linux下是正斜杠,但是在java编程中,反斜杠表示转义字符。在编程时,windows和linux都使用正斜杠即可。若使用反斜杠,则需转义即:\\

    3、时间返回类型是long类型,存储的是从1970 年 1 月 1 日 00:00:00 GMT 到现在的毫秒数,这样是为了提高存储效率。long类型占8字节,一个字节8位。

    4、exists()方法:测试此抽象路径名表示的文件或目录是否存在。

    getParentFile()方法:此抽象路径名指定父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null

    mkdirs()方法:创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。

    mkdir()方法:创建此抽象路径名指定的目录。

    createNewFile()方法:当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

    注意:文件的创建过程:首先创建文件所在的目录:利用mkdirs()方法创建目录,然后再创建该文件:利用createNewFile()方法。其中File的构造方法:只是在内存中创建一个File对象,不是在硬盘上创建。

    5、对于FileReader类和FileInputStream类区别

    两个类的构造函数的形式和参数都是相同的,参数为File对象或者表示路径的String。

    如果处理纯文本文件,建议使用FileReader,因为更方便,也更适合阅读;但是要注意编码问题!

    其他情况(处理非纯文本文件),FileInputStream是唯一的选择;FileInputStream是在Socket通讯时会用到很多,如将文件流以Stream的方式传向服务器!

    6、IO的规范用法

    ① File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); ② File file = new File ("hello.txt"); FileInputStream in=new FileInputStream(file); InputStreamReader inReader=new InputStreamReader(in,"utf-8"); BufferedReader bufReader=new BufferedReader(inReader); ③ File file = new File ("hello.txt"); FileReader fileReader=new FileReader(file); BufferedReader bufReader=new BufferedReader(fileReader);

    7、FileReader类

    FileReader fr = new FileReader("ming.txt");    char[] buffer = new char[1024];    int ch = 0;   while((ch = fr.read())!=-1 )   {    System.out.print((char)ch);   } 

    8、InputStreamReader类

    InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));   while((ch = isr.read())!=-1)   {    System.out.print((char)ch);   } 

    9、BufferedReader类

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


    实例:

    public static void main(String[] args) {// TODO Auto-generated method stubString separator = File.separator;String filename = "myfile.txt";//String directory = "dir1/dir2";      //采用这两者目录写法都可以String directory = "dir1"+File.separator+"dir2";File f = new File(directory,filename);if(f.exists()){                                //判断硬盘上该目录下是否存在该文件System.out.println("文件名:"+f.getAbsolutePath());System.out.println("文件大小:"+f.length());}else{f.getParentFile().mkdirs(); //创建指定目录,注意:项目加上包名,则是目录是最上层包名的父目录try {f.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
    5、递归列出文件目录结构

    public static void tree(File f,int level){String preStr = "";for(int i=0; i<level; i++){preStr +="   ";}File[] childs = f.listFiles();  //注意:这里的listFiles()方法表示的是当前目录中包含的文件名和目录名,不包含子目录。for(int i=0; i<childs.length; i++){System.out.println(preStr+childs[i].getName());if(childs[i].isDirectory()){tree(childs[i] , level + 1);}}}

    (七)java.lang.Enum枚举类型(1.5之后才有)

    1、只能够取特定值中的一个

    2、使用enum关键字,定义一个枚举类型(java.lang.Enum)。这是定义的一种类型。

    实例:

    public class TestEnum {public static void main(String[] args) {// TODO Auto-generated method stubMycolor m = Mycolor.red;switch(m) {case red:System.out.println("red");break;case yellow:System.out.println("yellow");break;default:System.out.println("blue");}}public enum Mycolor { red, yellow, blue}  //定义枚举类型}