📄 9.html
字号:
<HTML><HEAD><TITLE>黄金书屋</TITLE><META content="text/html; charset=gb2312" http-equiv=Content-Type><link rel="stylesheet" href="/cssset.css"></HEAD><BODY bgColor=#ffffff leftMargin=0 link=#000000 topMargin=0 vLink=#000000><center> <script language="JavaScript" src="/top.js"></script></center><TABLE background=images/bj.jpg border=0 cellSpacing=0 width="100%"> <TR> <TD bgColor=#c6bba4 vAlign=top width="12%"></TD> <TD background=/images/bj.jpg vAlign=top width="76%"> <center> <iframe width=468 height=60 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 scrolling=no bordercolor="#000000" src="/banner3.html"></iframe> </center> <br> </TD> <TD bgColor=#c6bba4 vAlign=top width="12%"></TD> </TR></TABLE><TABLE background=images/bj.jpg border=0 cellSpacing=0 width="100%"> <TR> <TD bgColor=#c6bba4 vAlign=top width="11%" align="right"> <br><br><br> <b><a href="/index.html">回首页</a><br><br><a href='8.html'>上一页</a><br><br><a href='http://pub.goldnets.com:81/bbs/post.php?job=new&topic=12210' target=_blank> 我有话说 </a><br><br><a href='http://pub.goldnets.com:81/bbs/bbslist.php?topic=12210' target=_blank> 评论一览 </a></center><br><!--title_end--></b> </TD> <TD bgColor=#c6bba4 vAlign=top width="1%"></TD> <TD background=/images/bj.jpg vAlign=top width="76%"> <br> <hr align="center" width="98%" size="1"> <br> <font color="blue">Java语言入门</font> >> <font color=red>第 九 章 Java输 入 输 出 操 作</font><hr width=90% color=#7A7A71><table width=88% border=0 align=center><tr><td><div style=font-size:12pt><pre> Java语言入门
第 九 章 Java输 入 输 出 操 作
9.1 Java 输 入 输 出 流
所 有 的 程 序 语 言 都 提 ?copy; 与 本 机 文 件 系 统 交 互 的 方
式;Java也 不 例 外。 我 们 将 看 看Java是 怎 样 处 理 标 准 文 件 输
入 输 出 的(包 括stdin,stout,stderr)。 当 你 在 网 络 上 开 发 小 程
序 时, 你 必 须 注 意 直 接 文 件 输 入 输 出 是 不 安 全 因 素 的 关
键。 大 多 数 用 户 设 置 他 们 的 浏 览 器, 可 让 你 自 由 的 访 问
他 们 的 文 件 系 统, 但 有 ?copy; 不 让 你 访 问。 当 然, 如 果 你 开
发 你 内 部 的 应 用 程 序, 你 也 许 需 要 直 接 访 问 文 件。
标 准 输 入 输 出 Unix的 用 户, 或 其 他 基 于 命 令 行 系 统 的 用
户(如DOS), 都 知 道 标 准 输 入 输 出 的 含 义。 标 准 输 入 文 件 是
键 盘, 标 准 输 出 文 件 是 你 的 终 端 屏 幕。 标 准 错 误 输 出 文
件 也 指 向 屏 幕, 如 果 有 必 要, 它 也 可 以 指 向 另 一 个 文 件
以 便 和 正 常 输 出 区 分。
系 统 类 Java通 过 系 统 类 达 到 访 问 标 准 输 入 输 出 的 功 能。
上 面 提 到 的 三 个 文 件 在 这 个 系 统 类 中 实 现: Stdin
System.in作 为InputStream类 的 一 个 实 例 来 实 现stdin, 你 可 以
使 用read()和skip(long n)两 个 成 员 函 数。read()让 你 从 输 入 中 读
一 个 字 节,skip(long n)让 你 在 输 入 中 跳 过n个 字 节。
Stout System.out作 为PrintStream来 实 现stdout, 你 可 以 使 用print()
和println()两 个 成 员 函 数。 这 两 个 函 数 支 持Java的 任 意 基 本
类 型 作 为 参 数。
Stderr System.err同stdout一 样 实 现stderr。 象System.out一 样, 你
可 以 访 问PrintStream 成 员 函 数。
9.2 标 准 输 入 输 出 例 子
这 里 有 一 个 例 子, 功 能 象Unix里 的cat或type:
import java.io.* class myCat{ public void main(String args[]) throws
IOException{ int b; int count = 0; while ((b = System.in.read()) !=
-1){ count++; System.out.print((char)b); } System.out.println();
//blank line System.err.println("counted"+count+"total bytes."); } }
9.3 普 通 输 入 输 出 类
除 了 基 本 的 键 盘 输 入 和 屏 幕 输 出 外, 我 们 还 需 要 联 系 文
件 的 输 入 输 出。 我 们 将 学 习 下 面 几 个 类: l FileInputStream l
DataInputStream l FileOutputStream l DataOutputStream
作 为 参 考, 再 列 出 一 ?copy; 特 定 应 用 的 类: l PipedInputStream
l BufferedInputStream l PushBackInputStream l StreamTokenizer l
PipedOutputStream l BufferedOutputStream l RandomAccessFile
我 们 不 在 此 讨 论 这 ?copy; 类, 但 你 可 以 在
JAVA_HOME/src/java/io目 录 里 查 看 每 个 类 的 成 员 函 数 定 义。
9.4 文 件
在 我 们 进 行 文 件 操 作 时, 需 要 知 道 一 ?copy; 关 于 文 件 的
信 息。File类 提 ?copy; 了 一 ?copy; 成 员 函 数 来 操 纵 文 件 和 获
得 一 ?copy; 文 件 的 信 息。
9.4.1 创 建 一 个 新 的 文 件 对 象
你 可 用 下 面 三 个 方 法 来 创 建 一 个 新 文 件 对 象:
File myFile; myFile = new File("etc/motd");
或
myFile = new File("/etc","motd"); //more useful if the directory or
filename are variables
或
File myDir = new file("/etc"); myFile = new File(myDir,"motd");
这 三 种 方 法 取 决 于 你 访 问 文 件 的 方 式。 例 如, 如 果 你 在
应 用 程 序 里 只 用 一 个 文 件, 第 一 种 创 建 文 件 的 结 构 是 最
容 易 的。 但 如 果 你 在 同 一 目 录 里 打 开 数 个 文 件, 则 第 二
种 或 第 三 种 结 构 更 好 一 ?copy;。
9.4.2 文 件 测 试 和 使 用
一 ?copy; 你 创 建 了 一 个 文 件 对 象, 你 便 可 以 使 用 以 下 成
员 函 数 来 获 得 文 件 相 关 信 息:
文 件 名 l String getName() l String getPath() l String getAbslutePath()
l String getParent() l boolean renameTo(File newName)
文 件 测 试 l boolean exists() l boolean canWrite() l boolean canRead()
l boolean isFile() l boolean isDirectory() l boolean isAbsolute()
一 般 文 件 信 息 l long lastModified() l long length()
目 录 用 法 l boolean mkdir() l String[] list()
9.4.3 文 件 信 息 获 取 例 子 程 序
这 里 是 一 个 独 立 的 显 示 文 件 的 基 本 信 息 的 程 序, 文 件 通
过 命 令 行 参 数 传 输:
import java.io.*; class fileInfo{ File fileToCheck; public static void
main(String args[]) throws IOException{ if (args.length>0){ for (int
i=0;i<args.length;i++){ fileToCheck = new File(args[i]);
info(fileToCheck); } } else{ System.out.println("No file given."); } }
public 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.cnaWrite()?" and is Writeable":""));
System.out.println("."); System.out.println("File is " + f.lenght() = "
bytes."); } else { System.out.println("File does not exist."); } } }
9.5 输 入 流
InputStream SequenceInputStream FileInputStream PipedInputStream
ByteArrayInputStream FileterInputStream StringBufferInputStream
DataInputStream LineNumberInputStream PushbackInputStream
BufferedInputStream 有 好 几 个 类 是 专 门 用 来 处 理 文 件 输 入
的。 下 面 是 文 件 输 入 类 的 层 次 结 构:
9.5.1 FileInputStream 对 象
FileInputStream典 型 地 表 示 一 种 顺 序 访 问 的 文 本 文 件。 通
过 使 用FileInputStream你 可 以 访 问 文 件 的 一 个 字 节、 几 个 字
节 或 整 个 文 件。
9.5.2 打 开FileInputStream
为 一 个 文 件 打 开 输 入 流FileInputStream, 你 必 须 将 文 件 名
或 文 件 对 象 传 送 给 结 构:
FileInput Stream myFileStream; myFileStream = new FileInputStream
( "/etc/motd");
你 还 可 以 象 下 边 这 样 从FileInputStream里 读 文 件 信 息:
File myFile ; FileInputSteam myFileStream; myFile = new File("/etc/motd");
myFileStream = new FileInputStream(myFile);
一 ?copy;FileInputStream输 入 流 打 开, 你 就 可 以 从 里 面 读 取
信 息 了。read()成 员 函 数 有 以 下 几 种 选 项:
l int read() //reads one byte //return -1 at end of stream l int read(byte
b[]) //fills entire array,if possible //returns number of bytes read
//returns -1 if end of stream is reached
l int read(byte b[],int offset, int len) //reads len bytes into b starting
at b[offset] //Returns number of bytes read, //or -1 if end of stream is
reached.
9.5.3 关 闭FileInputStream
当 你 完 成 一 个 文 件 的 操 作, 你 可 选 两 种 方 法 关 闭 它: 显
式 关 闭 和 隐 式 关 闭, 隐 式 关 闭 是 自 动 垃 圾 回 收 时 的 功
能。
显 式 关 闭 如 下: myFileStream.close();
9.6 例 程: 显 示 一 个 文 件
如 果 文 件 的 访 问 权 限 足 够, 你 可 以 在TextArea对 象 里 显 示
文 件 内 容。
下 面 是 显 示 文 件 的 程 序 片 断:
FileInputStream fis; TextArea ta; public vod init(){ byte b[] = new byte
[1024]; int I; //make it big enough or wait until you //know the size of
the file String s; try { fis = new FileInputStream("/etc/motd"); }
catch(FileNotFoundException e) { /*do something appropriate */ } try { I=
fis.read(b); } catch(IOException e) { /* do something appropriate */ }
s = new String(b, 0); ta = new TextArea(s,5,40); add (ta); }
9.7 DataInputStreams
DataInputStreams与FileInputStreams差 不 多。Data流 可 以 直 接 读 任
意 一 种 变 量 类 型, 如浮 点 数, 整 数 和 字 符 等。 一 般 来 说, 对
二 进 制 文 件 使 用DataInputStream流。
9.7.1 打 开 和 关 闭DataInputStreams
打 开 和 关 闭DataInputStreams对 象 时, 其 方 法 与FileInputStreams
相 同:
DataInputStreams myDataStream; FileInputStreams myFileStream;
//get a file handle myFileStream = new
FileInputStream("/usr/db/stock.dbf"); //open,or "chain" a data input
file myDataStream = new DataOutputStream(myFileStream);
//Now we can use both input streams to access our file //j(If we want to...)
myFileStream.read(b); I = myDataStrea.readInt();
//close the data friel explicityly //Always close the "topmost" file
stream myDataStream.close(); myFileStream.close();
9.7.2 读DataInputStreams
当 你 从DataInputStreams流 里 访 问 文 件 时, 你 可 以 使 用 与
FileInputStream流 相 同 的 成 员 函 数 read()。 但 你 也 可 以 使 用
其 他 访 问 方 法 来 读 取 不 同 种 类 的 数 据:
l byte readByte() l int readUnsignedByte() l short readShort() l int
readUnsighedShort() l char readChar() l int readInt l long readLong() l
float readFloat() l double readDouble() l String readLine()
以 上 每 一 个 成 员 函 数 都 读 取 相 应 的 数 据 对 象。 象String
readLine()成 员 函 数, 你 可 使 用\n,\r,\r\n,或EOF作 为 字 符 ?reg;
结 束 符。
读 一 个 长 整 型, 例 如:
long serialNo; ... serialNo = myDataStream.readLong();
9.8 URL 输 入 流
除 了 基 本 文 件 访 问 外,Java还 提 ?copy; 了 通 过 网 络 使 用URL
访 问 对 象 的 功 能。 在 下 面 这 个 例 子 里, 我 们 用
getDocumentBase()成 员 函 数 并 显 式 指 定URL对 象 来 访 问 声 音
和 图 象。
String imageFile = new String ("images/Duke/T1.gif"); images[0] =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -