1.引言
Java I/O系统是建立在数据流概念之上的,而在UNIX/Linux中有一个类似的概念,就是管道,它具有将一个程序的输出当作另一个程序的输入的能力。在Java中,可以使用管道流进行线程之间的通信,输入流和输出流必须相连接,这样的通信有别于一般的Shared Data通信,其不需要一个共享的数据空间。
2.相关类及其关系
1)字节流:
分为管道输出流(PipedOutputStream)和管道输入流(PipedInputStream),利用 java.io.PipedOutputStream和java.io.PipedInputStream可以实现线程之间的二进制信息传输。如果要进行管道输出,则必须把输出流连在输入流上。 java.io.PipedOutputStream是java.io.OutputStream的直接子类,而java.io. PipedInputStream是java.io.InputStream的直接子类。PipedOutputStream和 PipedInputStream往往成对出现、配合使用。举例说明:
TestPipe.Java
import java.io.IOException;
public class TestPipe {
public static void main(String[] args) {
Send s = new Send();
Receive r = new Receive();
&nb ......
把树形的结构抽象了一下。
ITree
package utility.structure.def;
/**
*
* @author odie.tang
*
* @version 1.0 10/30/09
*/
public interface ITree<E>{
E getData();
E remove();
void setData(E e);
int getDepth();
int getLevel();
ITree<E> getRoot();
ITree<E> getParent();
ITree<E> getFirstChild();
ITree<E> addFirtChild(E e);
ITree<E> getLastChild();
ITree<E> addLastChild(E e);
ITree<E> getNode(E e);
boolean isLeaf();
boolean isRoot();
boolean remove(E e);
}
IOriginalTree
package utility.structure.def;
import java.util.Collection;
import java.util.List;
public interface IOriginalTree<E> extends ITree<E> {
ITree<E> addChild(E e);
ITree<E> addChild(int childIndex,E e);
void addChildren(Collection<? extends E> children);
void addChildren(int childIndex, Collection<? extends E> children);
ITree ......
Java学习路径(一)工具篇
一、 JDK (Java Development Kit)
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。
1、 JDK的下载和安装
JDK又叫做J2SE(Java2 SDK Standard Edition),可以从Sun的Java网站上下载到,http://java.sun.com/j2se/downloads.html ,JDK当前最新的版本是J2SDK1.4.2,建议下载该版本的JDK,下载页面在这里:http://java.sun.com/j2se/1.4.2/download.html。
下载好的JDK是一个可执行安装程序,默认安装完毕后会在C:\Program Files\Java\目录下安装一套JRE(供浏览器来使用),在C:\j2sdk1.4.2下安装一套JDK(也包括一套JRE)。 ......
ITree
package utility.structure.def;
/**
*
* @author odie.tang
*
* @version 1.0 10/30/09
*/
public interface ITree<E>{
E getData();
E remove();
void setData(E e);
int getDepth();
int getLevel();
ITree<E> getRoot();
ITree<E> getParent();
ITree<E> getFirstChild();
ITree<E> addFirtChild(E e);
ITree<E> getLastChild();
ITree<E> addLastChild(E e);
ITree<E> getNode(E e);
boolean isLeaf();
boolean isRoot();
boolean remove(E e);
}
IBinaryTree
package utility.structure.def;
public interface IBinaryTree<E> extends ITree<E>{
boolean hasLeftChild();
boolean isLeftChild();
IBinaryTree<E> getLeftChild();
IBinaryTree<E> addLeftChild(E e);
boolean hasRightChild();
boolean isRightChild();
IBinaryTree<E> getRightChild();
IBinaryTree<E> addRightChild(E e);
}
BinaryTree
package ut ......
1.Java的编译运行
Java中的package概念相当于C++中的namespace的概念。但是java会把package的名字和文件系统中目录结构对应起来,也即如果你申明了某个package的名字为com.tij.everythingisobj,那么你的文件系统中必须创建com\tij\everythingisobj这样一个目录结构,所有属于这个package的java源代码都会放在这个目录下!之所以要这么做,是为了jvm加载运行java代码方便,可以根据package并结合CLASSPATH来装载*.java编译后的*.class在什么位置。
例如EveryObject .java:
package com.tij.everythingisobj;
public class EveryObject {
public static void main(String[] args) {
}
}
javac com\tij\everythingisobj\EveryObject.java
首先用javac来编译*.java文件,生成*.class。可以把这些*.class打包成一个jar包,但必须保留完成的路径名称。
java com.tij.everythingisobj.EveryObject
生成*.class后,可以用在命令行中用java命令告诉jvm要装载哪个类并运行,此时jvm会根据CLASSPATH中设置的路径去搜索你要运行的类。如果你的CLASSPATH为 c:\; ./,那么jvm会在 c:\co ......
1.Java的编译运行
Java中的package概念相当于C++中的namespace的概念。但是java会把package的名字和文件系统中目录结构对应起来,也即如果你申明了某个package的名字为com.tij.everythingisobj,那么你的文件系统中必须创建com\tij\everythingisobj这样一个目录结构,所有属于这个package的java源代码都会放在这个目录下!之所以要这么做,是为了jvm加载运行java代码方便,可以根据package并结合CLASSPATH来装载*.java编译后的*.class在什么位置。
例如EveryObject .java:
package com.tij.everythingisobj;
public class EveryObject {
public static void main(String[] args) {
}
}
javac com\tij\everythingisobj\EveryObject.java
首先用javac来编译*.java文件,生成*.class。可以把这些*.class打包成一个jar包,但必须保留完成的路径名称。
java com.tij.everythingisobj.EveryObject
生成*.class后,可以用在命令行中用java命令告诉jvm要装载哪个类并运行,此时jvm会根据CLASSPATH中设置的路径去搜索你要运行的类。如果你的CLASSPATH为 c:\; ./,那么jvm会在 c:\co ......
java中提供了io类库,可以轻松的用java实现对文件的各种操作。下面就来说一下如何用java来实现这些操作。
新建目录<%@ page contentType="text/html;charset=gb2312"%>
<%
//String URL = request.getRequestURI();
String filePath="C:\\测试\\";
filePath=filePath.toString();//中文转换
java.io.File myFilePath=new java.io.File(filePath);
if(!myFilePath.exists())
myFilePath.mkdir();
%>
新建文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*" %>
<%
String filePath="c:/测试/newFile.txt";
filePath=filePath.toString();
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
String content ="这是测试数据";
String strContent = content.toString();
myFile.println(strContent);
resultFile.close();
%>
......