对几个java的基础知识作一下补充。
一.异常
java对异常的处理同delphi一样,不是刻意的去避免它的发生,而是等它发生后去补救.
delphi的异常处理简单来说就是一下语句
try
except//异常发生后就转入此处执行
finally//不管异常发不发生,都转入此处运行
end
与此相类似,java的异常处理的基本形式如下
try{
}catch(exceptiontype1 e){
file://对异常情况1的处理
}catch(exceptiontype2 e){
file://对异常情况2的处理
throw(e)//抛出异常,和delphi中的raise是一回事
}import java.io.*;//调入和io相关的类第二个例子是一个存储电话信息的小程序,用户输入姓名和电话号码,程序将其存入phone.numbers文件中,通过fileoutputstream来实现
class fileinfo{
file://注意,main函数一定是静态方法
public static void main(string args【】)throws ioexception{
file filetocheck;//使用文件对象创建实例
if (args.length>0){
for (int i=0;i<args.length;i++){
filetocheck=new file(args【i】);//为文件对象分配空间
info(filetocheck);//这里引用的info一定要是静态方法成员
}
}
else{
system.out.println("no file given");
}
}
public static void info(file f)throws ioexception{
system.out.println("name:"+f.getname());
system.out.println("path:"+f.getpath());
if (f.exists()){
system.out.println("file exists.");
system.out.print((f.canread()?" and is readable":""));//判断函数,如果满足条件,输出前者,否则输出后者
system.out.print((f.canwrite()?"and is writable":""));
system.out.print(".");
system.out.println("file is"+f.length()+"bytes.");
}
else{
system.out.println("file does not exist.");
}
}
}
import java.io.*;
class phones{
static fileoutputstream fos;
public static final int linelength=81;
public static void main(string args[])throws ioexception{
byte[] phone=new byte[linelength];
byte[] name=new byte[linelength];
int i;
fos=new fileoutputstream("phone.numbers");
while(true){
system.err.println("enter a name(enter 'done' to quit)");
readline(name);
if ("done".equalsignorecase(new string(name,0,0,4))){
break;
}
system.err.println("enter the phone number");
readline(phone);
for (i=0;phone[i]!=0;i++){
fos.write(phone[i]);
}
fos.write(',');
for (i=0;name[i]!=0;i++){
fos.write(name[i]);
}
fos.write('\n');
}
fos.close();
}
private static void readline(byte line[])throws ioexception{
int i=0,b=0;
while((i<(linelength-1))&&((b=system.in.read())!='\n')){
line[i++]=(byte)b;
}
line[i]=(byte)(0);
}
}
import java.net.*;//java.net 包提供套接字工具。
public class remotefileclient {
protected string hostip;
protected int hostport;
protected bufferedreader socketreader;//负责读数据的对象
protected printwriter socketwriter;//负责写数据的对象
file://类的构造器有两个参数:远程主机的 ip 地址(hostip)和端口号(hostport)各一个.构造器将它们赋给实例变量
public remotefileclient(string ahostip, int ahostport) {
hostip = ahostip;
hostport = ahostport;
}
public static void main(string[] args) {
}
file://连接到远程服务器
public void setupconnection() {
}
file://向远程服务器请求文件信息
public string getfile(string filenametoget) {
}
file://从远程服务器上断开
public void teardownconnection() {
}
}
public void setupconnection() {
try {
socket client = new socket(hostip, hostport);//创建socket对象
outputstream outtoserverstream=client.getoutputstream();
inputstream infromserverstream=client.getinputstream();
socketreader = new bufferedreader(new inputstreamreader(infromserverstream));
file://把socket的inputstream包装进bufferedreader 以使我们能够读取流的行
socketwriter = new printwriter(outtoserverstream);
file://把socket的outputstream包装进printwriter 以使我们能够发送文件请求到服务器
} catch (unknownhostexception e) {
system.out.println("error setting up socket connection: unknown host at " + hostip + ":" + hostport);
file://对socket对象创建错误的异常处理
} catch (ioexception e) {
system.out.println("error setting up socket connection: " + e);
file://对io错误的异常处理
}
}public string getfile(string filenametoget) {
stringbuffer filelines = new stringbuffer();//stringbuffer对象也是string对象,但是比它更灵活,这里是用来存放读取内容的
try {
socketwriter.println(filenametoget);
socketwriter.flush();//文件存放地址输出到socketwriter中,然后清空缓冲区,让这个地址送到服务器中去
string line = null;
while ((line = socketreader.readline()) != null)
filelines.append(line + "\n");
file://既然已经发送到服务器去了,那我们都要等待响应,这里的程序就是等待服务器把我们所需要的文件内容传过来
} catch (ioexception e) {
system.out.println("error reading from file: " + filenametoget);
}
return filelines.tostring();//别忘了把buffer中的内容转成string再返回
}
3.断开
public void teardownconnection() {
try {
socketwriter.close();
socketreader.close();
} catch (ioexception e) {
system.out.println("error tearing down socket connection: " + e);
}
}import java.io.*;
import java.net.*;
public class remotefileclient {
protected bufferedreader socketreader;
protected printwriter socketwriter;
protected string hostip;
protected int hostport;
public remotefileclient(string ahostip, int ahostport) {
hostip = ahostip;
hostport = ahostport;
}
public string getfile(string filenametoget) {
stringbuffer filelines = new stringbuffer();
try {
socketwriter.println(filenametoget);
socketwriter.flush();
string line = null;
while ((line = socketreader.readline()) != null)
filelines.append(line + "\n");
} catch (ioexception e) {
system.out.println("error reading from file: " + filenametoget);
}
return filelines.tostring();
}
public static void main(string[] args) {
remotefileclient remotefileclient = new remotefileclient("127.0.0.1", 3000);
remotefileclient.setupconnection();
string filecontents = remotefileclient.getfile("remotefile.txt");
remotefileclient.teardownconnection();
system.out.println(filecontents);
}
public void setupconnection() {
try {
socket client = new socket(hostip, hostport);
outputstream outtoserverstream=client.getoutputstream();
inputstream infromserverstream=client.getinputstream();
socketreader = new bufferedreader(new inputstreamreader(infromserverstream));
socketwriter = new printwriter(outtoserverstream);
} catch (unknownhostexception e) {
system.out.println("error setting up socket connection: unknown host at " + hostip + ":" + hostport);
} catch (ioexception e) {
system.out.println("error setting up socket connection: " + e);
}
}
public void teardownconnection() {
try {
socketwriter.close();
socketreader.close();
} catch (ioexception e) {
system.out.println("error tearing down socket connection: " + e);
}
}
}
import java.io.*;跟客户机中一样,首先导入 java.net 的 java.io。接着,给我们的类一个实例变量以保存端口,我们从该端口侦听进入的连接。缺省情况下,端口是 3000。
import java.net.*;
public class remotefileserver {
protected int listenport = 3000;
public static void main(string[] args) {
}
public void acceptconnections() {
}
public void handleconnection(socket incomingconnection) {
}
}
public static void main(string[]args) {
remotefileserver server = new remotefileserver();
server.acceptconnections();
}非常简单,因为主函数无非是让服务器进入监听状态,所以直接调用acceptconnection().需要注意的是,必须先创建remotefileserver()的实例,而不是直接调用.public void acceptconnections() {
try {
serversocket server = new serversocket(listenport);//同客户机的socket对应,在服务器端,我们需要serversocket对象,参数是兼听的端口号
socket incomingconnection = null;//创建一个客户端的socket变量,以接收从客户端监听到的socket
while (true) {
incomingconnection = server.accept();//调用该 serversocket 的 accept() 来告诉它开始侦听,
handleconnection(incomingconnection);
}
file://不断监听直到来了一个连接请求,然后交由handleconnection处理
} catch (bindexception e) {
system.out.println("unable to bind to port " + listenport);
} catch (ioexception e) {
system.out.println("unable to instantiate a serversocket on port: " + listenport);
}
}public void handleconnection(socket incomingconnection) {
try {
outputstream outputtosocket = incomingconnection.getoutputstream();
inputstream inputfromsocket = incomingconnection.getinputstream();
file://首先获取同socket相关联的流outputtosocket和inputstream
file://其中outputtosocket是要返回给客户端socket的流
file://inputstream是客户端发来的请求,在这里就是文件路径,即"remotefile.txt"
bufferedreader streamreader =
new bufferedreader(new inputstreamreader(inputfromsocket));
file://首先要将inputstream转换到bufferedreader中
filereader filereader = new filereader(new file(streamreader.readline()));
file://从bufferedreader中读出文件路径,建立新对象filereader
bufferedreader bufferedfilereader = new bufferedreader(filereader);
file://再次建立bufferedreader对象,这一次它读取得是文件里面的内容
printwriter streamwriter =
new printwriter(outputstream);
file://把socket的outputtosocket流包装进printwriter 以使我们能够发送文件信息到客户端
string line = null;
while ((line = bufferedfilereader.readline()) != null) {
streamwriter.println(line);
}
file://从bufferedfilereader中读出文件信息,再经由streamwriter输出到客户端
filereader.close();
streamwriter.close();//注意socket的两个流关闭的顺序
streamreader.close();
file://完成之后关闭所有流
} catch (exception e) {
system.out.println("error handling a client: " + e);
}
}
import java.io.*;
import java.net.*;
public class remotefileserver {
int listenport;
public remotefileserver(int alistenport) {
listenport = alistenport;
}
public void acceptconnections() {
try {
serversocket server = new serversocket(listenport);
socket incomingconnection = null;
while (true) {
incomingconnection = server.accept();
handleconnection(incomingconnection);
}
} catch (bindexception e) {
system.out.println("unable to bind to port " + listenport);
} catch (ioexception e) {
system.out.println("unable to instantiate a serversocket on port: " + listenport);
}
}
public void handleconnection(socket incomingconnection) {
try {
outputstream outputtosocket = incomingconnection.getoutputstream();
inputstream inputfromsocket = incomingconnection.getinputstream();
bufferedreader streamreader = new bufferedreader(new inputstreamreader(inputfromsocket));
filereader filereader = new filereader(new file(streamreader.readline()));
bufferedreader bufferedfilereader = new bufferedreader(filereader);
printwriter streamwriter = new printwriter(outputtosocket);
string line = null;
while ((line = bufferedfilereader.readline()) != null) {
streamwriter.println(line);
}
filereader.close();
streamwriter.close();
streamreader.close();
} catch (exception e) {
system.out.println("error handling a client: " + e);
}
}
public static void main(string[] args) {
remotefileserver server = new remotefileserver(3000);
server.acceptconnections();
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器