除了基本的文件访问之外,
java技术提供了使用统一资源定位器(URL)来访问网络上的文件。当你使用Applet的getDocumentBase()方法来访问声音和图象时,你已经隐含地使用了URL对象。
[
java]
String imageFile = new String ("images/Duke/T1.gif");
images[0] = getImage(getDocumentBase(), imageFile);
String imageFile = new String ("images/Duke/T1.gif");
images[0] = getImage(getDocumentBase(), imageFile);
当然,你也可以直接使用URL如下:
[
java]
java.net.URL imageSource;
try{
imageSource = new URL("http://mysite.com/~info");
}catch(MalformedURLException e) {}
images[0] = getImage(imageSource, "Duke/T1.gif");
java.net.URL imageSource;
try{
imageSource = new URL("http://mysite.com/~info");
}catch(MalformedURLException e) {}
images[0] = getImage(imageSource, "Duke/T1.gif");
你经常会发现你只想读取文件的一部分数据,而不需要从头至尾读取整个文件。你可能想访问一个作为
数据库的文本文件,此时你会移动到某一条记录并读取它的数据,接着移动到另一个记录,然后再到其他记录――每一条记录都位于文件的不同部分。
java编程语言提供了一个RandomAccessFile类来处理这种类型的输入输出。
创建一个随机访问文件
你可以用如下两种方法来打开一个随机存取文件:
用文件名
myRAFile = new RandomAccessFile(String name, String mode);
用文件对象
myRAFile = new RandomAccessFile(File file, String mode);
mode参数决定了你对这个文件的存取是只读(r)还是读/写(rw)。
例如,你可以打开一个
数据库文件并准备更新:
RandomAccessFile myRAFile;
myRAFile = new RandomAccessFile("db/stock.dbf","rw");
存取信息
RandomAccessFile对象按照与数据输入输出对象相同的方式来读写信息。你可以访问在DataInputStrem和DataOutputStream中所有的read()和write()操作。
java编程语言提供了若干种方法,用来帮助你在文件中移动。
long getFilePo
inter();返回文件指针的当前位置。
void seek(long pos); 设置文件指针到给定的绝对位置。这个位置是按照从文件开始的字节偏移量给出的。位置0标志文件的开始。
long length()返回文件的长度。位置length()标志文件的结束。
添加信息
你可以使用随机存取文件来得到文件输出的添加模式。
myRAFile = new RandomAccessFile("
java.log","rw");
myRAFile.seek(myRAFile.length());
对象串行化
java.io.Serializable接口支持将一个
java技术对象存放到一个流中。
将一个对象存放到某种类型的永久存储器上称为"保持"。如果一个对象可以被存放到磁盘或磁带上,或者可以发送到另外一台机器并存放到存储器或磁
盘上,那么这个对象就被称为可保持的。
java.io.Serializable接口没有任何方法,它只作为一个"标记",用来表明实现了这个接口的类可以串行化。类中没有实现Serializable接口的对象不能被保持。
当一个对象被串行化时,只有对象的数据被保存;方法和构造函数不属于串行化流。如果一个数据变量是一个对象,那么这个对象的数据成员也会被串行化。树或者对象数据的结构,包括这些子对象,构成了对象图。
www.atcpu.com因为有些对象类所表示的数据在不断地改变,所以它们不会被串行化;例如,
java.io.FileInputStream 、
java.io.FileOutputStream和
java.lang.Thread等流。如果一个可串行化对象包含某个不可串行化元素的,那么整个串行化操作就会失败,而且会抛出一个NotSerializableException。
如果对象图包含一个不可串行化的,只要这个已经用transient关键字进行了标记,那么对象仍然可以被串行化。
[
java]
public class MyClass implements Serializable {
public transient Thread myThread;
private String customerID;
private int total;
}
public class MyClass implements Serializable {
public transient Thread myThread;
private String customerID;
private int total;
}
域存取修饰符对于被串行化的对象没有任何作用。写入到流的数据是字节格式,而且字符串被表示为UTF(文件系统
安全的通用字符集转换格式)。transient关键字防止对象被串行化。
[
java]
public class MyClass implements Serializable {
public transient Thread myThread;
private transient String customerID;
private int total;
}