Java流,文件和I/O

java.io包中包含几乎所有可能永远需要在Java中执行输入和输出(I/ O)类。所有这些数据流代表一个输入源和输出目标。 java.io包中的流支持多种数据,如基本类型,对象,本地化的字符等

流可以被定义为一个数据序列。 InputStream用于读取从一个源数据,OutputStream是用于将数据写入到一个目的地。

JAVA I/O提供了强有力,灵活的支持,因为它涉及到的文件和网络,但本教程介绍与流非常基本的功能和I / O。我们会来一个接一个看下面最常用的例子:

读取控制台输入:

Java输入控制台由System.in读取完成。为了获得一个连接到控制台基于字符的数据流,包装System.in在一个BufferedReader对象,创建一个字符流。下面是最常见的语法来获得BufferedReader:

BufferedReader br = new BufferedReader(new
                      InputStreamReader(System.in));

一旦得到BufferedReader,我们可以使用read()方法来达到一个字符或readLine()方法来读取从控制台的字符串。

从控制台读取字符:

要读取一个BufferedReader一个字符,使用read( ) (其语法时才如下所示)方法:

int read( ) throws IOException

每一次read( )被调用时,它读取输入流的字符,并返回它作为一个整数的返回值。1表示到流的末尾。正如所看到的,它可以抛出一个IOException异常。

下面的程序演示read()通过读取字符从控制台,直到用户键入 "q":

// Use a BufferedReader to read characters from the console.

import java.io.*;

public class BRRead {
   public static void main(String args[]) throws IOException
   {
      char c;
      // Create a BufferedReader using System.in
      BufferedReader br = new BufferedReader(new
                         InputStreamReader(System.in));
      System.out.println("Enter characters, ‘q‘ to quit.");
      // read characters
      do {
         c = (char) br.read();
         System.out.println(c);
      } while(c != ‘q‘);
   }
}

下面是一个示例运行:

Enter characters, ‘q‘ to quit.
123abcq
1
2
3
a
b
c
q

从控制台读取字符串:

从键盘读取一个字符串,使用readLine( )是BufferedReader类的成员。其一般形式如下所示:

String readLine( ) throws IOException

下面的程序演示的BufferedReader和的readLine()方法。该程序读取并显示的文本行直到输入"end":

// Read a string from console using a BufferedReader.
import java.io.*;
public class BRReadLines {
   public static void main(String args[]) throws IOException
   {
      // Create a BufferedReader using System.in
      BufferedReader br = new BufferedReader(new
                              InputStreamReader(System.in));
      String str;
      System.out.println("Enter lines of text.");
      System.out.println("Enter ‘end‘ to quit.");
      do {
         str = br.readLine();
         System.out.println(str);
      } while(!str.equals("end"));
   }
}

下面是示例的运行结果:

Enter lines of text.
Enter ‘end‘ to quit.
This is line one
This is line one
This is line two
This is line two
end
end

写入控制台输出:

控制台输出使用print()和调用println()是最容易完成的,如前所述。这些方法是由PrintStream类是引用bySystem.out的对象的类型来定义。尽管System.out 是字节流,使用它进行简单的程序输出还是可以接受的。

因为PrintStream 是从派生的OutputStream输出流,它也实现了??低层次的方法Write()。因此 write()方法可以用来写入控制台。写最简单的形式是由PrintStream的定义如下所示:

void write(int byteval)

此方法写入到流由byteval指定的字节。虽然byteval被声明为一个整数,只有低8位写入。

例子:

以下是使用write()方法来输出字符“A”后跟一个换行符到屏幕上一个简单的例子:

import java.io.*;

// Demonstrate System.out.write().
public class WriteDemo {
   public static void main(String args[]) {
      int b;
      b = ‘A‘;
      System.out.write(b);
      System.out.write(‘
‘);
   }
}

这将产生输出屏幕上简单的“A”字母。

A

注: 一般不会经常使用write() 来执行控制台输出,因为print()和println() 一样基本上更容易使用。

读取和写入文件:

如前面所述,一个流可以被定义为一个数据序列。 InputStream的用于读取从一个源数据和OutputStream的是用于将数据写入到一个目的地。

下面是类的层次结构来处理输入和输出流。

这两个重要的数据流是文件输入流和文件输出流,这将在本教程中加以讨论:

FileInputStream:

此流被用于读取来自文件的数据。可以使用关键字new创建的对象和有几种类型的构造函数可用。

下面的构造函数接受一个文件名作为一个字符串创建一个输入流对象来读取文件。

InputStream f = new FileInputStream("C:/java/hello");

下面的构造函数接受一个文件对象来创建一个输入流对象来读取文件。首先我们创建一个使用File()方法,如下所示的文件对象:

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

一旦有了InputStream对象,再有就是helper方法,可以用来读取流或做其他的操作在流列表。

SN 方法描述
1 public void close() throws IOException{}
此方法关闭文件输出流。发布与该文件相关的所有系统资源。抛出一个IOException。
2 protected void finalize()throws IOException {}
这种方法清除连接到该文件。请确保此文件输出流的close方法被调用时,有此流不再有引用。抛出一个IOException。
3 public int read(int r)throws IOException{}
此方法读取从InputStream中指定的数据字节。返回一个int。返回数据的下一个字节,如果是文件的末尾,则返回-1。
4 public int read(byte[] r) throws IOException{}
此方法读取从输入流r.length字节到一个数组中。返回读取的字节总数。如果文件末尾,则返回-1。
5 public int available() throws IOException{}
给出了可以从该文件输入流中读取的字节数。返回一个int。

也有其他重要的输入流,更多的细节可以参考以下链接:

文件输出流:

文件输出流是用于创建一个文件并写入数据到它。流会创建一个文件,如果它不存在,打开它的输出之前。

这里有两个构造函数可以用来创建一个FileOutputStream对象。

下面的构造函数接受一个文件名作为一个字符串创建一个输入流对象写入文件:

OutputStream f = new FileOutputStream("C:/java/hello")

下面的构造函数接受一个文件对象创建一个输出流对象写入文件。首先,我们创建一个使用File() 方法,如下一个文件对象:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

一旦有OutputStream对象,再有就是helper方法的列表,它可以被用来写入流或做其他操作上的流。

SN 方法描述
1 public void close() throws IOException{}
此方法关闭文件输出流。发布与该文件相关的所有系统资源。抛出一个IOException。
2 protected void finalize()throws IOException {}
这种方法清除连接到该文件。请确保此文件输出流的close方法被调用时,有此流不再有引用。抛出一个IOException。
3 public void write(int w)throws IOException{}
此方法将指定字节写入到输出流。
4 public void write(byte[] w)
写入w.length字节自提字节数组的OutputStream。

也有其他重要的输出流,更多的细节可以参考以下链接:

例子:

下面是例子来演示InputStream和OutputStream:

import java.io.*;

public class fileStreamTest{

   public static void main(String args[]){

   try{
      byte bWrite [] = {11,21,3,40,5};
      OutputStream os = new FileOutputStream("test.txt");
      for(int x=0; x < bWrite.length ; x++){
         os.write( bWrite[x] ); // writes the bytes
      }
      os.close();

      InputStream is = new FileInputStream("test.txt");
      int size = is.available();

      for(int i=0; i< size; i++){
         System.out.print((char)is.read() + "  ");
      }
      is.close();
   }catch(IOException e){
      System.out.print("Exception");
   }
   }
}

上面的代码将创建文件test.txt,并会写入给定的数字在二进制格式。同样是在标准输出屏幕上输出。

文件导航和I/O:

还有其他几个类,我们将去了解文件导航的基本知识和I/O。

Java中的目录:

创建目录:

有两个有用的文件实用工具方法,它可以用来创建目录:

  • mkdir( ) 方法创建一个目录,在成功时返回假失败真的。失败表明,在文件对象中指定的路径已经存在,或者该目录不能被创建,因为整个路径尚不存在。
  • mkdirs() 方法同时创建一个目录和目录下的所有父目录。

下面的示例创建"/tmp/user/java/bin" 目录:

import java.io.File;

public class CreateDir {
   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      // Create directory now.
      d.mkdirs();
  }
}

编译并执行上面的代码来创建 "/tmp/user/java/bin".

注: 的Java会自动在UNIX和Windows路径分隔符按约定保护。如果在WindowsJava使用正斜杠(/),该路径仍然会正确地解析。

读取目录:

目录是一个包含其他文件和目录列表的文件。当创建一个文件对象,它是一个目录,isdirectory()方法将返回true。

可以调用 list( )时该对象上提取里面的其他文件和目录列表。这里显示的程序演示了如何使用 list( )来检查一个目录的内容:

import java.io.File;

public class DirList {
   public static void main(String args[]) {
      String dirname = "/tmp";
      File f1 = new File(dirname);
      if (f1.isDirectory()) {
         System.out.println( "Directory of " + dirname);
         String s[] = f1.list();
         for (int i=0; i < s.length; i++) {
            File f = new File(dirname + "/" + s[i]);
            if (f.isDirectory()) {
               System.out.println(s[i] + " is a directory");
            } else {
               System.out.println(s[i] + " is a file");
            }
         }
      } else {
         System.out.println(dirname + " is not a directory");
    }
  }
}

这将产生以下结果:

Directory of /tmp
bin is a directory
lib is a directory
demo is a directory
test.txt is a file
README is a file
index.htmll is a file
include is a directory
时间: 2024-10-05 04:19:25

Java流,文件和I/O的相关文章

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date

Java 流(Stream)、文件(File)和IO

Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 但本文讲述最基本的和流与I/O相关的功能.我们将通过一个个例子来学习这些功能. 读取控制台输入 Java的控制台输入由System.in完成. 为了获得一

java FileStream文件流操作

直接上代码,函数使用说明详见Java API文档 import java.io.*; public class StreamDemo { public static void main(String[] args) { File f=new File("F:\\workspace\\JavaPrj\\test.txt"); FileOutputStream out=null; try { out=new FileOutputStream(f); byte[] b=new String(

java IO文件操作简单基础入门例子,IO流其实没那么难

IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 try {             File inputFile = new File(args[0]);             if (!inputFile.exists()) {                 System.out.println("源文件不存在,程序终止");

java IO流文件的读写具体实例(转载)

引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能找到,但自己总感觉不是很踏实,所以今天就抽空看了看java IO流的一些操作,感觉还是很有收获的,顺便总结些资料,方便以后进一步的学习... IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流

Java流(Stream)、文件(File)和IO

Java流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 但本节讲述最基本的和流与I/O相关的功能.我们将通过一个个例子来学习这些功能. 读取控制台输入 Jav

java 中 “文件” 和 “流” 的简单分析

java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 //创建一个File 对象,检验文件是否存在,若不存在就创建然后对File package wfu; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Scanner; pu

Java笔记:Java 流(Stream)、文件(File)和IO

更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. 输入输出流 简介 一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 下图是一个描述输入流和输出流的类层次图: 在java.io包中操作文件内容的主要有两大类:字节流.字符流,两类都分为输入和输出操作. 在字节流中输出数据主要是使用

java 流操作对文件的分割和合并的实例详解_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代码: package com.dufy.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import jav

java对文件的二进制流base64编码解码

1.java对文件的二进制流base64编码解码 一般保存文件的时候选择的方式是将url存进数据库.今天遇到一个对接传文件流的二进制base64编码,简单记录一下. 依赖于commons-io包和commons-codec包. 编码的方法如下: public static String encodeFile(File file) throws IOException { byte[] readFileToByteArray = FileUtils.readFileToByteArray(file