Java 常用类(API).doc_第1页
Java 常用类(API).doc_第2页
Java 常用类(API).doc_第3页
Java 常用类(API).doc_第4页
Java 常用类(API).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java常用类(API) 石凤贵【知识点】理解Java API的概念,了解Object类,基本类型的封装类,熟悉String类和StringBuffer类,Hashtable与Properties类,System类与Runtime类,Date类、Calendar类、Math类、BigInteger类,Math与Random类。提示:查阅JDK API【内容】一、Object类类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。Object类的常用方法:equals()、getClass()、hashCode()、notify()、notifyAll()、toString()、wait();当用户自定义类时,要覆盖从父类Object继承过来的toString()方法,否则将得不到用户可理解的运行结果。 二、基本类型的封装类1、基本类型Java基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型。基本类型共有九种,它们分别都有相对应的包装类。对于基本类型void以及它的包装类java.lang.Void,我们都无法直接进行操作。基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了 基本类型存储在栈中,因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。从Java5.0(1.5)开始,JAVA虚拟机(Java Virtual Machine)可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类,但这并不意味着你可以通过基本类型调用它们的包装类才具有的方法。另外,所有基本类型(包括void)的包装类都使用了final修饰,因此我们无法继承它们扩展新的类,也无法重写它们的任何方法。下图显示了几种基本类型之间的默认逻辑转换关系: 图中的实线表示无精度损失的转换,而虚线则表示这样的转换可能会损失一定的精度。如果我们想把一个能表示更大范围或者更高精度的类型,转换为一个范围更小或者精度更低的类型时,就需要使用强制类型转换(Cast)了。不过我们要尽量避免这种用法,因为它常常引发错误。运算符对基本类型的影响 :当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。 2、封装类(包装类)(1)Java中的包装类、装箱和拆箱在Java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。基本类型的数据不是对象,不能作为对象调用其toString()、hashCode()、getClass()、equals()等等方法。所以在java中,针对8种基本数据类型,提供了针对每个基本数据类型的包装类。如下:INDEX基本数据类型包装类1intInteger2charCharacter3floatFloat4doubleDouble5byteByte6shortShort7longLong8booleanBoolean所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double,等等。所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。/JDK1.5 之前使用手动方式进行装箱 和拆箱的 操作public class IntegerDemopublic static void main (String agrs)int i=10;Integer j=new Integer(i); /手动装箱操作 int i1=Value();/手动拆箱操作System.out.println(i1*i1); /output:100/JDK1.5之后可自动进行的装箱和拆箱的操作,比较方便public class IntegerDemo02public static void main (String agrs)int i=10Integer j=i;int k=j;System.out.println(+k); /output:11包装类的另外一个比较有用的是可以将String 字符串类型转换为相应的基本数据类型。下面以将String转为int为例:public class IntegerDemo04public static void main (String args)String str=1500;tryint i=Integer.parseInt(str);System.out.println(+i);catch (Exception e)e.printStackTrace(); /打印异常信息;/ output: 1501如果在上述方法中str=15er00;则在调用parseInt方法时候会产生NumberFormatException异常,总结在包装类中将String转换为包装类所对应的基本数据类型的方法如下,所有的方法都将抛出NumberFormatException异常,需要在调用时候使用try.catch 进行捕获index包装类返回的基本数据类型方法名1Integerintstatic int Integer.parseInt(Sting s)2Charactercharstatic char Character.parseChar(String s)3Floatfloatstatic float Float.parseFloat(String s)4Dobuledoublestatic double Double.parseDouble(String s)5Bytebytestatic byte Byte.parseByte(String s)6Shortshortstatic short Short.parseShort(String s)7Longlongstatic long Long.parseLong(String s)8Booleanbooleanstatic boolean Boolean.parseBoolean(String s)类似的一个方法为 parseXXX(String s,int radix),对于Integer包装类,这个radix表示进制. parseInt(String s)默认为十进制。 其他包装类的radix参数意义,请参见API文档可以自动装包,也可以自动解包。三、String和StringBufferjava.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append(le) 会使字符串缓冲区包含“startle”,而 z.insert(4, le) 将更改字符串缓冲区,使之包含“starlet”。通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量 自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。 append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。 例如,如果 z 引用一个当前内容为“start”的字符串生成器对象,则该方法调用 z.append(le) 将使字符串生成器包含“startle”,而 z.insert(4, le) 将更改字符串生成器,使之包含“starlet”。 通常,如果 sb 引用 StringBuilder 的实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动 增大。 将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。 String的创建 String s = hello; JVM先根据内容hello查找对象,如果没有找到,则在heap上创建新对象,并将其赋予s1,否则使用已经存在的对象 String s = new String(hello); JVM直接在heap上创建新的对象,所以在heap中会出现内容相同,地址不同的String对象hello就是一个对象 因此才可以 String s1=hello; 才可以 String s2=new String(hello); String的比较 = 比较地址 equals 比较内容 =是判断两个变量或实例是不是指向同一个内存空间,即引用 equals是判断两个变量或实例所指向的内存空间的值是不是相同 举例: String s1 = hello; String s2 = hello; String s3 = new String(hello); s1 = s2; / true 地址相同 s1 = s3; / false 地址不同 s1.equals(s2); / true 内容相同 s1.equals(s3); / true 内容相同 intern() 方法 查找内容相同(equals()的字符串 String s1 = hello; / hello不存在,jvm创建新对象 (1) String s2 = new String(hello); / 创举新对象 (2),这时heap中存在两个内容为hello的对象 s1 = s2; / false / 地址不同 s1.equals(s2); / true / 内容相同 s2 = ern(); / true / 找到对象(1) 并赋予s2 s1 = s2; / true ! / 注意:此时s1,s2同指向(1) 效率:String 与 StringBuffer 情景1: (1) String result = hello + world; (2) StringBuffer result = new String().append(hello).append( world); (1) 的效率好于 (2),不要奇怪,这是因为JVM会做如下处理 编译前 String result = hello + world; 编译后 String result = hello world; 情景2: (1) public String getString(String s1, String s2) return s1 + s2; (2) public String getString(String s1, String s2) return new StringBuffer().append(s1).append(s2); (1) 的效率与 (2) 一样,这是因为JVM会做如下处理 编译前 return s1 + s2; 编译后 return new StringBuffer().append(s1).append(s2); 情景3: (1) String s = s1; s += s2; s += s3; (2) StringBuffer s = new StringBuffer().append(s1).append(s2).append(s3); (2) 的效率好于(1),因为String是不可变对象,每次+=操作都会造成构造新的String对象 情景4: (1) StringBuffer s = new StringBuffer(); for (int i = 0; i 50000; i +) s.append(hello); (2) StringBuffer s = new StringBuffer(250000); for (int i = 0; i 50000; i +) s.append(hello); (2) 的效率好于 (1),因为StringBuffer内部实现是char数组,默认初始化长度为16,每当字符串长度大于char 数组长度的时候,JVM会构造更大的新数组,并将原先的数组内容复制到新数组,(2)避免了复制数组的开销 关键点 1). 简单的认为 .append() 效率好于 + 是错误的! 2). 不要使用 new 创建 String 3). 注意 .intern() 的使用 4). 在编译期能够确定字符串值的情况下,使用+效率最高 5). 避免使用 += 来构造字符串 6). 在声明StringBuffer对象的时候,指定合适的capacity,不要使用默认值(18) 7). 注意以下二者的区别不一样 - String s = a + b; - String s = a; s += b; 四、Hashtable与Properties类1、Hashtable类Hashtable也是一种高级数据结构,用以快速检索数据。Hashtable不仅可以像Vector一样动态存储一系列对象,而且对存储的每一个对象(称为值)都要安排另一个对象(称为关键字)与之相关联。例如,我们可以在Hashtable中存储若干个国家的中文和英文名,并且可以通过英文名称检索对应的中文名称,在这种情况中中文就是值,英文就是关键字。向Hashtable对象中存储数据,使用的是Hashtable.put(Object key, Object value)方法,从Hashtable中检索数据,使用Hashtable.get(Object key)方法。值和关键字都可以是任何类型的非空对象。下面代码生成一个存储数字的Hashtable,用英文数字作为关键字:Hashtable numbers = new Hashtabel();numbers.put(one, new Integer(1); numbers.put(two, new Integer(2); numbers.put(three, new Integer(3); 要想检索其中two关键字对应的数据,看下面的代码就能明白。Integer n =(Integer)numbers.get(two); if(n != null) System.out,println(two = + n); 要想成功地从Hashtable中检索数据,用作关键字的对象必须正确覆盖Object.hashCode方法和Object.equals方法。覆盖Object.equals方法道理不难想象,检索数据时要比较用来检索的关键字是否与存储在Hashtable中的某个关键字相等,如果两个关键字对象不能正确判断是否相等,检索是不可能正确的。Object.hashCode方法回返一个叫散列码的值,这个值是由对象的地址以某种方式转换来的。内容相同的两个对象,既然是两个对象地址就不可能一样,所以Object.hashCode返回的值也不一样。要想两个内容相同的对象的hashCode方法返回一样的散列码,子类必须覆盖Object.hashCode方法,用于关键字的类,如果它的两个对象用equals方法比较相等的,那么这两个对象的hashcode方法返回值也要一样,所以我们也要覆盖hashCode方法。这里可以提一下String类,因为String类已按照关键字类的要求覆盖了这两个方法,如果两个String对象内容不相等,它们的hashCode的返回值也不会相等。如果两个String对象的内容相等,它们的hashCode的返回值也相等注意:StringBuffer类没有按照关键字类的要求覆盖hashCode方法,即使两个StringBuffer类对象的内容相等,但这两个对象的hashCode方法的返回值却不相等。2、Hashtable与HashMap的相同之处Java包含两个类,java.util.Hashtable 和java.util.HashMap,它们提供了一个多种用途的hashtable机制。Hashtable和HashMap对象可以让你把一个key和一个value结合起来,并用put() 方法把这对key/value输入到表中。然后你可以通过调用get()方法,把key作为参数来得到这个value(值)。只要满足两个基本的要求,key和value可以是任何对象。注意,因为key和value必须是对象,所以原始类型(primitive types)必须通过运用诸如Integer(int)的方法转换成对象。下面是一段简单的示例代码:先创建一个hashtable,保存了1, 2, 3三个对象。Hashtable numbers = new Hashtable();numbers.put(one, new Integer(1);numbers.put(two, new Integer(2);numbers.put(three, new Integer(3);查找Integer n = (Integer)numbers.get(two);if (n != null) System.out.println(two = + n);为了将一个特定类的对象用做一个key,这个类必须提供两个方法,equals() 和 hashCode()。这两个方法在java.lang.Object中,所以所有的类都可以继承这两个方法;但是,这两个方法在Object类中的实现一般没什么用,所以你通常需要自己重载这两个方法。Equals()方法把它的对象同另一个对象进行比较,如果这两个对象代表相同的信息,则返回true。该方法也查看并确保这两个对象属于相同的类。如果两个参照对象是完全一样的对象,Object.equals()返回true,这就说明了为什么这个方法通常不是很适合的原因。在大多数情况下,你需要一个方法来一个字段一个字段地进行比较,所以我们认为代表相同数据的不同对象是相等的。hashCode()方法通过运用对象的内容执行一个哈希函数来生成一个int值。Hashtable和HashMap用这个值来算出一对key/value位于哪个bucket(哈希元)(或列表)中。如果你想创建一个hashtable,这个hashtable运用你自己定义的一个类的对象作为key,那么你应该确信这个类的equals()和hashCode()方法提供有用的值。首先查看你扩展的类,确定它的实现是否满足你的需求。如果没有,你应该重载方法。任何equals()方法的基本设计约束是,如果传递给它的对象属于同一个类,而且它的数据字段设定为表示同样数据的值,那么它就应该返回true。你也应该确信,如果传递一个空的参数给该方法,那么你的代码返回。另外,在设计一个hashCode()方法时,应该记住一些规则。首先,该方法必须为一个特定的对象返回相同的值,而不管这个方法被调用了多少次(当然,只要对象的内容在调用之间没有改变,在将一个对象用做一个hashtable的key时,应该避免这一点)。第二,如果由你的equals()方法定义的两个对象是相等的,那么它们也必须生成相同的哈希码。第三,这更像是一个方针,而不是一个原则,你应该设法设计方法,使它为不同的对象内容生成不同的结果。如果偶尔不同的对象正好生成了相同的哈希码,这也不要紧。但是,如果该方法只能返回范围在1到10的值,那么只能用10个列表,而不管在hashtable中有多少个列表。String类已经按照要求实现了hashCode(),因为在设计自己的关键字类时,可以调用String.hash(),但是StringBuffer()不能用作关键字类,其并没按要求实现hashCode().3、Hashtable和HashMap不同之处:Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。4、Hashtable性能影响hashtable功效的主要因素就是表中列表的平均长度,因为平均搜索时间与这个平均长度直接相关。很显然,要减小平均长度,你必须增加hashtable中列表的数量;如果列表数量非常大,以至于大多数列表或所有列表只包含一条记录,你就会获得最佳的搜索效率。然而,这样做可能太过分了。如果你的hashtable的列表数远远多于数据条目,那你就没有必要做这样的内存花费了,而在一些情况下,人们也不可能接受这样的做法。我们预先知道我们有多少条记录1,000。知道这点后,我们就可以决定我们的hashtable应该包含多少个列表,以便达成搜索速度和内存使用效率之间最好的折中方式。然而,在许多情况下,你预先不知道你要处理多少条记录;数据被读取的文件可能会不断扩大,或者记录的数量可能一天一天地发生很大的变化。随着条目的增加,Hashtable和HashMap类通过动态地扩展表来处理这个问题。这两个类都有接受表中列表最初数量的构造器,和一个作为参数的负载系数(load factor):public Hashtable(int initialCapacity,float loadFactor)public HashMap(int initialCapacity,float loadFactor)将这两个数相乘计算出一个临界值。每次给哈希表添加一个新的条目时,计数就被更新,当计数超过临界值时,表被重新设置(rehash)。(列表数量增加到以前数量的两倍加1,所有的条目转移到正确的列表中。)缺省的构造器设定最初的容量为11,负载系数是0.75,所以临界值是8。当第九条记录被添加到表中时,就重新调整哈希表,使其有23个列表,新的临界值将是17(23*0.75的整数部分)。你可以看到,负载系数是哈希表中平均列表数量的上限,这就意味着,在缺省情况下,哈希表很少会有许多包含不只一条记录的列表。比较我们最初的例子,在那个例子中,我们有1,000条记录,分布在10个列表中。如果我们用缺省值,这个表将会扩展到含有1,500多个列表。但你可以控制这点。如果用负载系数相乘的列表数量大于你处理的条目数,那么表永远不会重制,所以我们可以仿效下面的例子:/ Table will not rehash until it/ has 1,100 entries (10*110):Hashtable myHashTable = new Hashtable(10, 110.0F);你可能不想这么做,除非你没有为空的列表节省内存,而且不介意额外的搜索时间,这可能在嵌入系统中会出现这种情况。然而,这种方法可能很有用,因为重新设置很占用计算时间,而这种方法可以保证永远不会发生重新设置这种情况。注意,虽然调用put()可以使表增大(列表数量增加),调用remove()不会有相反的结果。所以,如果你有一个大的表,而且从中删除了大部分条目,结果你会有一个大的但是大部分是空的表。Hashtable测试:/MyKey.javaclass MyKey private String name = null;private int age = 0;public MyKey(String name, int age)=name;this.age=age;public boolean equals(Object obj) / TODO: Add your code hereif(obj instanceof MyKey)MyKey objTemp=(MyKey)obj; /编译器不能自动将Object类转换为MyKeyif(name.equals(objT)return true;elsereturn false;elsereturn false;public int hashCode() / TODO: Add your code herereturn name.hashCode()+age;public String toString() / TODO: Add your code herereturn name+,+age;/HashtableTest.javaimport java.util.*;public class HashtableTest public static void main(String args) / TODO: Add your code hereHashtable numbers=new Hashtable();numbers.put(new MyKey(zhangsan,18),new Integer(1);numbers.put(new MyKey(lisi,15),new Integer(2); numbers.put(new MyKey(wangwu,20),new Integer(3); Enumeration e=numbers.keys(); while(e.hasMoreElements() MyKey key=(MyKey)e.nextElement(); System.out.print(key.toString()+=); System.out.println(numbers.get(key); System.out.println(numbers.get(new MyKey(zhangsan,18);HashMap测试:/HsshMapTest.javaimport java.util.*;class HashMapTest public static void printElements(Collection c,HashMap hm) Iterator it=c.iterator(); while(it.hasNext() Object key1=it.next(); System.out.println(key1+ = +hm.get(key1); public static void main(String args) HashMap hm=new HashMap(); Student s1=new Student(1,zhang3); Student s2=new Student(2,li4); Student s3=new Student(3,wang5); Student s4=new Student(1,zhang3); hm.put(s1,123); hm.put(s2,456); hm.put(s3,789); hm.put(s4,321); Set keys=hm.keySet(); System.out.println(Key:); printElements(keys,hm); class Student int num; String name; Student(int num,String name) this.num=num; =name; public int hashCode() return num*name.hashCode(); public boolean equals(Object o) Student s=(Student)o; return num=s.num & name.equals(); public String toString() return num+:+name; 5、关于Properties有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:WINDOWS;C:WINDOWSSYSTEM。Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法。java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道。Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和get()的替代,你应该用setProperty()和getProperty(),它们用String参数。Properties测试:/PropertiesTest.javapackage PropertiesTest;import java.io.*;import java.util.Properties;public class PropertiesTest public static void main(String args) / TODO: Add your code hereProperties settings=new Properties();trysettings.load(new FileInputStream(count.txt);catch(Exception e)/e.printStackTrace();settings.setProperty(count,String.valueOf(0);/settings.get(count);int c=Integer.parseInt(settings.getProperty(count)+1;/getProperties返回字符串,parseInt()将字符串转换为整数System.out.println(This is the + c +st);/settings.put(count,new Integer(c).toString();settings.setProperty(count,new Integer(c).toString();try settings.store(new FileOutputStream(count.txt),Program is used:);catch(Exception e)e.printStackTrace();Properties 类表示一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 如何从输入流中加载属性文件,使用load(InputStream is)方法: 1. Propertiesproperties=newProperties(); 2. InputStreamis=newFileInputStream(perties); 3. properties.load(is); 4. is.close();5. Properties properties = new Properties();InputStream is = new FileInputStream(perties);properties.load(is);is.close();如何读属性文件中的值,使用getProperties(String key)方法: Stringtemp=properties.getProperties(Stringkey); 重载的方法getProperties(String key, String defa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论