第12章文件读写——输入输出流
Java 输入输出流及文件读写详解
I/O类体系在JDK API中,基础的IO类都位于java.io包,而新实现的IO类则位于一系列以java.nio开头的包名中,这里首先介绍java.io包中类的体系结构。
按照前面的说明,流是有方向的,则整个流的结构按照流的方向可以划分为两类:1、输入流:该类流将外部数据源的数据转换为流,程序通过读取该类流中的数据,完成对于外部数据源中数据的读入。
2、输出流:该类流完成将流中的数据转换到对应的数据源中,程序通过向该类流中写入数据,完成将数据写入到对应的外部数据源中。
而在实际实现时,由于JDK API历史的原因,在java.io包中又实现了两类流:字节流(byte stream)和字符流(char stream)。
这两种流实现的是流中数据序列的单位,在字节流中,数据序列以byte为单位,也就是流中的数据按照一个byte一个byte的顺序实现成流,对于该类流操作的基本单位是一个byte,而对于字节流,数据序列以char为单位,也就是流中的数据按照一个char一个插入的顺序实现成流,对于该类流操作的基本单位是一个char。
另外字节流是从JDK1.0开始加入到API中的,而字符流则是从JDK1.1开始才加入到API中的,对于现在使用的JDK版本来说,这两类流都包含在API的内部。
在实际使用时,字符流的效率要比字节流高一些。
在实际使用时,字符流中的类基本上和字节流中的类对应,所以在开始学习IO类时,可以从最基础的字节流开始学习。
在SUN设计JDK的IO类时,按照以上的分类,为每个系列的类设计了一个父类,而实现具体操作的类都作为该系列类的子类,则IO类设计时的四个体系中每个体系中对应的父类分别是:字节输入流InputStream该类是IO编程中所有字节输入流的父类,熟悉该类的使用将对使用字节输入流产生很大的帮助,下面做一下详细的介绍。
按照前面介绍的流的概念,字节输入流完成的是按照字节形式构造读取数据的输入流的结构,每个该类的对象就是一个实际的输入流,在构造时由API完成将外部数据源转换为流对象的操作,这种转换对程序员来说是透明的。
C中的文件操作和输入输出流
C中的文件操作和输入输出流C语言是一种低级语言,对于文件的操作和输入输出流的处理是其重要的特性之一。
通过文件操作和输入输出流,我们可以读取外部文件的内容、将程序的输出保存到文件中,同时还可以创建、编辑和删除文件。
本文将介绍C语言中的文件操作和输入输出流,帮助读者更好地理解和运用这些功能。
一、文件操作文件操作是指对计算机硬盘中的文件进行读写、创建和删除的操作。
C语言提供了一系列的函数和方法,方便程序员进行文件的操作。
下面是几个常用的文件操作函数:1. fopen()函数:用于打开文件。
该函数接受两个参数,第一个参数是文件名,第二个参数是打开方式(例如,读取、写入、追加等)。
成功打开文件后,该函数会返回一个指向该文件的指针。
2. fclose()函数:用于关闭文件。
当我们不再需要使用打开的文件时,应该使用该函数关闭文件。
关闭文件可以释放系统资源,避免造成内存泄漏。
3. fread()函数:用于读取文件内容。
该函数接受四个参数,分别是指向数据的指针、每个数据的大小、要读取的数据量以及文件指针。
这样我们可以通过该函数从文件中读取指定数量的数据,并存储到指定的内存地址中。
4. fwrite()函数:用于向文件中写入内容。
该函数接受四个参数,分别是指向数据的指针、每个数据的大小、要写入的数据量以及文件指针。
通过该函数,我们可以将指定数量的数据写入到文件中。
5. fseek()函数:用于设置文件指针的位置。
该函数接受三个参数,分别是文件指针、偏移量以及起始位置。
通过使用该函数,我们可以控制文件指针的位置,实现文件的跳转和定位。
二、输入输出流输入输出流是C语言中用于处理文件读写的一种机制。
通过输入输出流,我们可以将程序的输入和输出连接到文件中,实现对文件的读写操作。
C语言中提供了标准输入输出流,分别对应于键盘输入和屏幕输出。
1. 标准输入流(stdin):标准输入流用于接收用户的输入,通常使用scanf()函数来读取输入的内容。
输入输出流
输入输出流一、知识要点1.C++语言的“流”是指信息从外部输入设备(如键盘、磁盘等)向计算机内部(内存)输入和从内存向外部输出设备(显示器、磁盘)输出的过程。
这种输入输出过程被形象地比喻为“流”。
2.C++系统中的所有I/O类均包含在iostream.h 、fstream.h、strstream.h这三个系统头文件中。
3.C++系统编译预处理时,要对# include命令进行“文件包含”处理,把该命令中指定的文件中的全部内容嵌入到该命令的位置,再编译整个C++文件,生成相应的目标代码程序。
“文件包含”命令可以节省程序设计人员的重复劳动,也可以共享一些相同的程序段。
C++语言不仅提供了现成的I/O类库供用户使用,而且还为用户进行标准I/O操作定义了4个类对象,它们分别是cin、cout、cerr、clong4.用格式控制符进行格式化输入、输出5.所谓“文件”一般是指:存储在外部介质上的数据的集合。
文件可用于存入程序代码,也可用于存放数据。
6.C++语言的文件名也是由文件的主名和扩展名两部分组成,它们之间用“.”号分隔。
文件的主名是由用户命名的一个有效的C++标识符,为了同其他软件系统兼容,一般不超过8个有效字符。
7.C++语言把文件看作是一个字符(字节)序列,即由一个一个字符的数据顺序组成。
根据数据的组织形式可分为ASCII文件和二进制文件两种。
ASCII文件又称为文本(text)文件或字符文件,它的每一个字节放一个ASCII代码,代表一个字符。
二进制文件又称为字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。
8.对文件的操作要在程序中使用文件,就要在程序的开始包含预处理命令:#include <fstream.h>对一般文件(主要是磁盘文件)的操作过程是:打开,读/写,关闭。
用户对标准I/O文件不需要进行打开/关闭,标准I/O文件函数分为以下三种:(1)字符I/O函数字符输入函数getchar ( )和字符输出函数putchar ( )。
C语言中的文件操作与输入输出流
C语言中的文件操作与输入输出流文件处理是程序设计中常见的操作之一,而在C语言中,文件操作函数和输入输出流是实现文件处理的主要手段。
本文将介绍C语言中文件操作与输入输出流的基本概念、函数和使用方法。
一、文件操作概述在C语言中,文件被看作是一系列按顺序排列的字节。
文件的打开、读取、写入和关闭都是通过相应的函数来实现的。
C语言提供了一系列的文件操作函数,其中最常用的包括:文件打开函数(fopen)、文件关闭函数(fclose)、文件读取函数(fread)、文件写入函数(fwrite)和文件定位函数(fseek)等。
二、文件打开与关闭文件的打开和关闭是文件操作的基础。
通过文件打开函数(fopen),我们可以打开一个指定的文件,并返回一个文件指针,以便后续对文件的读取和写入操作。
文件关闭函数(fclose)则用于关闭一个已打开的文件。
例如,下面的代码演示了如何打开和关闭一个文件:```c#include <stdio.h>int main() {FILE *file = fopen("example.txt", "r");if (file == NULL) {printf("文件打开失败\n");return 1;}// 对文件的读取和写入操作fclose(file);return 0;}```三、文件读取与写入文件读取与写入是文件操作中常用的功能。
C语言提供了一系列的文件读取函数和文件写入函数,可以根据不同的需求调用适当的函数来完成操作。
常用的文件读取函数包括:getchar(从标准输入读取一个字符)、fgetc(从指定文件读取一个字符)、fgets(从指定文件读取一行字符串)、fscanf(从指定文件读取格式化数据)等。
常用的文件写入函数包括:putchar(向标准输出写入一个字符)、fputc(向指定文件写入一个字符)、fputs(向指定文件写入一行字符串)、fprintf(向指定文件写入格式化数据)等。
C语言中的文件操作与输入输出流
C语言中的文件操作与输入输出流C语言是一门广泛应用于各种编程领域的高级编程语言,而文件操作与输入输出流是C语言中至关重要的一部分。
本文将介绍C语言中的文件操作相关函数以及输入输出流的使用方法。
文件操作在C语言中,我们可以使用文件操作函数来对文件进行读写和处理。
文件操作主要包括文件的打开、关闭、读取和写入等操作。
下面是C语言中常用的几个文件操作函数:1. fopen:用于打开一个文件,并返回一个指向该文件的指针。
其函数原型为:```cFILE* fopen(const char* filename, const char* mode);```其中,filename是要打开的文件名,而mode是打开文件的模式,如读取("r")、写入("w")、追加("a")等。
2. fclose:用于关闭一个已打开的文件。
其函数原型为:```cint fclose(FILE* stream);```其中,stream是要关闭的文件指针。
3. fgetc 和 fputc:用于读取和写入单个字符。
fgetc将会从文件中读取一个字符,而fputc则将一个字符写入文件。
4. fgets 和 fputs:用于读取和写入字符串。
fgets从文件中读取一行字符串,当遇到换行符或指定的最大字符数时停止,而fputs则将一个字符串写入文件。
5. fprintf 和 fscanf:用于格式化的读取和写入。
fprintf将格式化的数据写入文件,而fscanf从文件中读取格式化的数据。
这些函数可以帮助我们处理文件的读写和数据的存取,通过灵活运用,我们可以轻松处理各种文件操作需求。
输入输出流在C语言中,输入输出流是通过标准库函数来实现的。
标准库函数提供了一些常用的函数来处理输入输出流,以下是几个常用的输入输出流函数:1. printf 和 scanf:用于标准输出和标准输入。
printf将数据格式化输出到屏幕上,而scanf从标准输入中读取格式化的数据。
C语言中的文件操作与输入输出流处理
C语言中的文件操作与输入输出流处理C语言是一种广泛使用的编程语言,而文件操作与输入输出流处理是C语言中非常重要的一部分。
在C语言中,我们可以通过文件操作来读取和写入文件,以及对文件进行各种处理。
同时,输入输出流处理也可以让我们方便地与外部文件进行交互,实现数据的输入输出。
在C语言中,文件操作主要涉及到文件的打开、关闭、读取和写入等操作。
下面我们来具体了解一下C语言中文件操作的一些常用函数:1. fopen函数:用于打开一个文件,语法为:FILE *fopen(const char *filename, const char *mode);其中,filename为文件名,mode为打开文件的模式,有"r"(只读)、"w"(写)、"a"(追加)等不同模式。
2. fclose函数:用于关闭一个打开的文件,语法为:int fclose(FILE *stream);其中,stream为打开文件所返回的指针。
3. fgetc和fputc函数:分别用于读取和写入单个字符,语法为:int fgetc(FILE *stream)和int fputc(int c, FILE *stream)。
4. fgets和fputs函数:分别用于读取和写入一行字符,语法为:char *fgets(char *str, int n, FILE *stream)和int fputs(const char *str, FILE *stream)。
5. fprintf函数:用于向文件中格式化输出数据,语法为:int fprintf(FILE*stream, const char *format, ...);其中,format为输出格式。
C语言中的输入输出流处理则是通过标准输入输出流来实现的。
通过标准输入输出流,我们可以方便地进行终端输入输出,或与外部文件进行数据交互。
下面是C语言中一些常用的输入输出流处理函数:1. scanf函数:用于从终端输入数据,语法为:int scanf(const char *format, ...);其中,format为输入格式。
C语言的文件操作与输入输出流控制
C语言的文件操作与输入输出流控制C语言是一种广泛应用于系统编程和嵌入式开发的高级编程语言,它提供了丰富的文件操作和输入输出流控制的功能,使得程序能够与外部环境进行数据的交互和存储。
本文将介绍C语言中文件操作和输入输出流控制的相关知识。
一、文件操作在C语言中,文件是指计算机中存储数据的一种资源,可以是文本文件、二进制文件等。
文件操作是指对文件进行读取、写入、打开、关闭等操作。
1. 文件的打开与关闭在C语言中,使用文件指针来操作文件。
文件指针是一个指向文件的指针变量,通过它可以对文件进行读写操作。
文件的打开使用fopen函数,语法如下:FILE *fopen(const char *filename, const char *mode);其中,filename是文件名,mode是打开模式。
常见的打开模式有:- "r":只读模式,打开一个已存在的文本文件。
- "w":写入模式,打开一个文本文件,如果文件不存在则创建,如果文件存在则清空文件内容。
- "a":追加模式,打开一个文本文件,如果文件不存在则创建,如果文件存在则在文件末尾追加内容。
- "rb"、"wb"、"ab":对应的是二进制文件的读写模式。
文件的关闭使用fclose函数:int fclose(FILE *stream);其中,stream是文件指针。
2. 文件的读取与写入文件的读取使用fscanf函数,语法如下:int fscanf(FILE *stream, const char *format, ...);其中,stream是文件指针,format是格式控制字符串,...是要读取的变量。
文件的写入使用fprintf函数,语法如下:int fprintf(FILE *stream, const char *format, ...);其中,stream是文件指针,format是格式控制字符串,...是要写入的变量。
输入输出流
public class Files
{
public static void main(String[] args) throws IOException
{
Files f = new Files();
// System.out.println(f.readFile("f:\\LinkFile.java"));
}
}
}
/**
* 检查文件中是否为一个空
* @param filePath
* @param fileName
* @return 为空返回true
* @throws IOException
*/
public boolean fileIsNull(String filePath,String fileName) throws IOException
for(int i=0;i<ss.length;i++)
{
ss[i] = "信息技术和互联网(计算机软硬件,通讯) "+i;
}
f.writeFile("f:\\ss\\","TestFile.txt",ss);
}
/**
* 文件的写入
* @param filePath(文件路径)
/**
* @author zhangqinglin
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
输入输出流
1.什么是IOJava中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。
Java的I/O 流提供了读写数据的标准方法。
任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。
Java.io是大多数面向数据流的输入/输出类的主要软件包。
此外,Java也对块传输提供支持,在核心库java.nio中采用的便是块IO。
流IO的好处是简单易用,缺点是效率较低。
块IO效率很高,但编程比较复杂。
Java IO模型 :Java的IO模型设计非常优秀,它使用Decorator模式,按功能划分Stream,您可以动态装配这些Stream,以便获得您需要的功能。
例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。
2.数据流的基本概念数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。
数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。
对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。
不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。
“流是磁盘或其它外围设备中存储的数据的源点或终点。
”在电脑上的数据有三种存储方式,一种是外存,一种是内存,一种是缓存。
比如电脑上的硬盘,磁盘,U盘等都是外存,在电脑上有内存条,缓存是在CPU里面的。
外存的存储量最大,其次是内存,最后是缓存,但是外存的数据的读取最慢,其次是内存,缓存最快。
这里总结从外存读取数据到内存以及将数据从内存写到外存中。
对于内存和外存的理解,我们可以简单的理解为容器,即外存是一个容器,内存又是另外一个容器。
c语言输入流和输出流的概念
c语言输入流和输出流的概念C语言输入流和输出流的概念输入流的概念•输入流是指从外部获取数据并输入到计算机程序中的数据流。
在C语言中,输入流通常用于从键盘或文件中获取输入。
•C语言中的输入流通常使用`头文件中的函数来实现,如scanf和fscanf`等。
输出流的概念•输出流是指将计算机程序中的数据输出到外部设备的流。
在C语言中,输出流通常用于向屏幕或文件等外部设备输出数据。
•C语言中的输出流通常使用`头文件中的函数来实现,如printf 和fprintf`等。
输入输出流的关系•输入流和输出流是C语言中用来进行输入和输出操作的重要概念。
•输入流和输出流可以通过函数的调用来切换,在输入操作时使用输入流,在输出操作时使用输出流。
输入流的操作•使用输入流可以从键盘或文件中获取输入数据,并赋值给变量或数组。
常用的输入流函数包括:1.scanf:从标准输入流中读取数据,并按照指定的格式赋值给变量。
2.fscanf:从指定的输入流中读取数据,并按照指定的格式赋值给变量。
输出流的操作•使用输出流可以将程序中的数据输出到屏幕或文件等外部设备。
常用的输出流函数包括:1.printf:将格式化的数据输出到标准输出流(屏幕)。
2.fprintf:将格式化的数据输出到指定的输出流(通常是文件)。
输入流和输出流函数的格式化控制符•在输入流和输出流函数中,格式化控制符用于指定输入和输出的数据格式。
•常用的格式化控制符包括:–%d:用于输出或输入整数。
–%f:用于输出或输入浮点数。
–%c:用于输出或输入字符。
–%s:用于输出或输入字符串。
示例代码#include <>int main() {int num;char str[50];printf("请输入一个整数:");scanf("%d", &num);printf("您输入的整数是:%d\n", num);printf("请输入一个字符串:");scanf("%s", str);printf("您输入的字符串是:%s\n", str);return 0;}以上是对C语言输入流和输出流的简述,输入流用于获取外部数据输入到程序中,输出流用于将程序中的数据输出到外部设备。
文件输入输出流
文件输入输出流文件输入输出流是在计算机中进行文件读写操作的一种机制。
通过文件输入输出流,我们可以从文件中读取数据或将数据写入文件中。
在程序开发中,文件输入输出流常用于读取配置文件、读取和写入日志文件、进行数据持久化等操作。
文件输入输出流的基本概念和使用方法如下:1. 文件输入流(FileInputStream):用于从文件中读取数据。
- 创建文件输入流对象:可以使用FileInputStream类的构造方法来创建一个文件输入流对象。
需要提供文件路径作为参数。
- 读取数据:可以使用文件输入流对象的read()方法来读取数据。
read()方法会返回一个整数值,表示读取到的字节数据。
当读取到文件末尾时,read()方法会返回-1。
2. 文件输出流(FileOutputStream):用于将数据写入文件中。
- 创建文件输出流对象:可以使用FileOutputStream类的构造方法来创建一个文件输出流对象。
需要提供文件路径作为参数。
如果文件不存在,会自动创建新文件;如果文件已存在,会清空文件内容。
- 写入数据:可以使用文件输出流对象的write()方法来写入数据。
write()方法接受一个字节数组作为参数,将字节数组中的数据写入文件中。
文件输入输出流的使用示例:```javaimport java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileIOExample {public static void main(String[] args) {// 文件输入流示例try {FileInputStream inputStream = new FileInputStream("input.txt");int data;while ((data = inputStream.read()) != -1) {System.out.print((char) data);}inputStream.close();} catch (IOException e) {e.printStackTrace();}// 文件输出流示例try {FileOutputStream outputStream = new FileOutputStream("output.txt"); String data = "Hello, World!";byte[] bytes = data.getBytes();outputStream.write(bytes);outputStream.close();} catch (IOException e) {e.printStackTrace();}}}```在上面的示例中,我们通过文件输入流读取了名为"input.txt"的文件中的数据,并使用文件输出流将字符串"Hello, World!"写入了名为"output.txt"的文件中。
输入输出流.正式版PPT文档
9.1 概述
C++用流(stream)的概念描述数据的输入 输出,流是计算机中的数据从源头移动到目 的地的这种过程的抽象。
流具有很强的方向性,与输入设备相联系的 流称为输入流,与输出设备相联系的流称为 输出流,与输入输出设备相联系的流称为输 入输出流。
流操作
对流的基本操作有两种,从流中获得数 据称为提取操作,向流中添加数据称 为插入操作。C++语言用流对象来管 理流,流对象一般都与某种设备相联 系,程序员通过操纵流对象,达到控 制输入输出的目的。
c1=cin.get(); cin.get(c2); cin.get(a,21,’#’);
成员函数getline
istream& getline(char *s,int n,char ch=’\n’);
char a[80]; cin.getline(a,21,’#’);
读取控制成员函数
函数原型
9.3 输入流
istream类提供了数据流输入的功能,在程序里可 以不断地从流对象中提取数据,存入相应的变量 中。
输入时使用的istream流对象通常是cin,有4种基 本操作方式。第1种是用流提取运算符,读入基本 类型的数据;第2种是用成员函数get,读入一个 字符或者字符串;第3种是用成员函数getline, 读入一个字符串;第4种是用成员函数read,读 入一串指定数量的字符。
பைடு நூலகம்
说明
int gcount(void) const
istream& ignore(int n=1,int d=EOF)
istream& putback(char ch)
int peek(void)
文件输入输出流
输出流:写文件ofstream
(1)创建文件对象,与具体文件建立关联
ofstream fout; fout.open(“test.txt”); (2)进行写文件操作 int i=10; fout<<i; (3)关闭文件 fout.close();
ofstream fout ("test.txt");
文件打开模式
打开模式 ios::out ios::in ios::ate ios::app ios::trunc ios::nocreate ios::replace ios::binary
含义 打开以进行写入 打开以进行读取 在打开时查找到 文件结尾 追加到文件结尾 如果文件存在则删除 如果文件不存在则打开失败 如果文件已存在 则打开失败 打开一个二进制文件
打开一个文件并删除所有内容 ofstream fout("TEST.TXT"); ofstream fout("TEST.TXT",ios::out); ofstream fout("TEST.TXT",ios::out|ios::trunc);
打开一个文件并追加内容 ofstream fout("TEST.TXT",ios::app);
读写操作 文本文件:使用<<,>>运算符 二进制文件:用函数成员 get、put、read、write等
关闭文件:使用成员函数close, 如:fout.close();
打开一个文件进行二进制输出 ofstream fout("TEST.TXT",ios::binary);
检查打开是否成功 if(fout){...}或
输入输出流
PPT文档演模板
输入输出流
2.3 查询文件属性
String s="e:"+File.separator+"Thread1.java"; File file=new File(s); String exists = file.exists() ? "Yes" : "No"; String canRead = file.canRead() ? "Yes" : "No"; String canWrite = file.canWrite() ? "Yes" : "No"; String isFile = file.isFile() ? "Yes" : "No"; String isHid = file.isHidden() ? "Yes" : "No"; String isDir = file.isDirectory() ? "Yes" : "No"; String isAbs = file.isAbsolute() ? "Yes" : "No";
PPT文档演模板
输入输出流
P261, 例4 Example20_4 TextArea text; BufferedReader in; Button button; FileReader file; EWindow() {
super("流的读取"); text=new TextArea(10,10); text.setBackground(Color.cyan); try { File f=new File("E:\\lanhong\\", "a.txt");
第12章流类库和输入输出概论
第12章流类库和输入输出【内容提要】流的概念及流类库输入输出的格式控制输入与输出运算符的重载文件操作【重点与难点】12.1 流的概念及流类库12.1.1 流的概念C++中的流是指数据从一个对象传递到另一个对象的操作。
从流中读取数据称为提取操作,向流内添加数据称为插入操作。
流在使用前要建立,使用后要删除。
如果数据的传递是在设备之间进行,这种流就称为I/O流。
C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。
C++流预定义了4个标准流类对象,它们可以直接用来输入输出。
这些标准流类对象都包含在头文件iostream.h中。
istream cin; //与标准输入设备相关联的标准输入流。
ostream cout; //与标准输出设备相关联的标准输出流。
ostream cerr; //与标准错误输出设备相关联的非缓冲方式的标准输出流。
ostream clog; //与标准错误输出设备相关联的缓冲方式的标准输出流。
12.1.2 流类库C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。
使用这些流类库时,必须包含相应的头文件。
ios类及其派生类为用户提供了使用流类的接口。
以下给出ios类及其派生类的层次结构图。
iosistreamifstreamistream_withassign iostreamistrstream fstreamostream strstreamofstream sdiostreamostream_withassignostrstream图12.1 ios类的层次关系12.2 输入输出的格式控制C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。
12.2.1 用ios类的成员函数进行格式控制使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。
输入输出流
输入/输出流版本1.01、流的概念比如说,访问一个文件或是向文件中写入数据,将内部的数据输出到终端上(显示器、打印机等)。
这种数据在通信通道中流动,就形成了数据流(stream),它是指在数据通信中,数据的起点和终点。
所谓起点也就是程序输出数据,而终点就是一个输入的数据流。
Java程序中对文件的操作,主要是读取和写入,这两个操作都要是用输入输入流,在对文件进行写入是使用的是输入流,而读取文件使用的是输出流。
2、关键技术解析(文件和目录)File(String pathname): 通过给定的字符串路径名来创建文件对象。
Public String getName() : 返回由此抽象路径名表示的文件或目录名。
Public String getAbsolutePath(): 返回抽象路径名得绝对路径名。
Public String getPath(): 将此抽象路径名转换为一个路径名字符串。
Public String getParent(): 返回此抽象路径名的父路径名的路径名字符串。
Public boolean canWrite(): 测试应用程序是否可以修改此抽象路径名表示的文件。
Public boolean isDirectory(): 测试此抽象路径名表示的文件是否是一个目录。
Public long lastModified(): 返回此抽象路径名表示的文件最后一次被修改的时间。
Public long length(): 返回此抽象路径名表示的文件的长度。
Public boolean canRead(): 测试应用程序是否可以读取此抽象路径名表示的文件。
public static void main(String[] args) {// TODO文件和目录测试File file = new File("E:\\temp\\key.txt");//根据指定的路径创建一个File对象 System.out.println("文件名为:"+file.getName());//获取File对象的名字System.out.println("绝对路径为:"+file.getAbsolutePath());//获取File 对象的绝对路径System.out.println("路径为:"+file.getPath());//获取File对象的相对路径 System.out.println("所属磁盘目录为:"+file.getParent());//获取改File对象的目录if(!file.exists()){file.mkdir();}System.out.println("此路径名表示的文件时一个目录吗?:"+file.isDirectory());//判断File对象是不是目录System.out.println("它是处于可读状态吗?:"+file.canRead());//判断File 是不是可读的System.out.println("它是出土可写状态吗?:"+file.canWrite());//判断File 是不是可写的System.out.println("该文件长度为:"+file.length());//判断该File对象中的字符长度System.out.println("此文件最后修改时间为:"+stModified());//获取File最后修改时间}}文件名为:key.txt绝对路径为:E:\temp\key.txt路径为:E:\temp\key.txt所属磁盘目录为:E:\temp此路径名表示的文件时一个目录吗?:false它是处于可读状态吗?:true它是出土可写状态吗?:true该文件长度为:0此文件最后修改时间为:13021628689683、在制定目录下创建单个目录在一个目录下创建一个文件时,首先判断指定的目录是否存在,如果不存在则根据路径自动创建一个,然后再创建一个空文本。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
javax.swing包的JFileChooser类实例方法 ◦ showOpenDialog 弹出打开文件对话框 ◦ showSaveDialog 弹出保存文件对话框 【例12-3】编写使用打开文件对话框的程序。 JFileChooser chooser = new JFileChooser(); int returnVal = chooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { JOptionPane.showMessageDialog(null, "您选择打开文件 " + chooser.getSelectedFile()); //显示消息框 } if (returnVal == JFileChooser.CANCEL_OPTION) { JOptionPane.showMessageDialog(null, "您选择“取消”打开文件"); }
【例12-1】使用文件字符流建立文本文件,读取文件内容并显示。 try{ File file = new File("D:\\abc.txt"); FileWriter fileout = new FileWriter(file); //字符输出流 fileout.write("第1行(文本文件内容)abcdefg"); fileout.write("\r\n第2行 1234567..."); fileout.write("\r\n第3行 end"); fileout.close(); FileReader filein = new FileReader(file); //字符输入流 int charcode; while ((charcode = filein.read())!= -1){ //判断是否到末尾 System.out.print((char)charcode); //屏幕显示 } filein.close(); } catch(Exception e){… }
javax.swing包中JOptionPane类的静态方法
(1)showMessageDialog:显示消息框。 (2)showInputDialog:显示输入框。 (3)showConfirmDialog:显示确认框。 方法常用参数:
parentComponent:可设为null。 message:要显示的消息,类型为根类Object。 title:对话框的标题,属于字符串类型。 optionType:按钮种类,整型常量字段。 messageType:图标种类,整型常量字段。
System.out.println("-----------------"); Scanner scan = new Scanner(System.in); System.out.println("请输入用户姓名:"); String name = scan.next(); System.out.println("请输入密码:"); String password = scan.next(); randomfile.seek(file.length()); //定位文件末尾 randomfile.writeChars(name+"|"+password+"\r\n");//写串 System.out.println("已追加姓名和密码到"+ file); randomfile.close(); //关闭随机访问文件 } }catch(Exception e){…} }finally{…}
构建若干个客户类对象并保存到D:\customer.dat文件
class Customer implements Serializable{ //序列化的客户类 private static final long serialVersionUID = 10L; //序列化版本号 private String name; //姓名 private String phone; //电话 public Customer(String name,String phone){ = name; this.phone = phone; } public String getName(){ return name; } public String getPhone(){ return phone; } public String toString(){ StringBuilder sb = new StringBuilder(); sb.append("客户名:" + name); sb.append("\t电话:" + phone); return sb.toString(); } }
两次运行结果如图所示。
try{ JFileChooser chooser = new JFileChooser(); String source, target; System.out.println("从打开文件对话框中选择源文件..."); if(chooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){ source = chooser.getSelectedFile().toString(); System.out.println("选中的源文件是:" + source); RandomAccessFile input = new RandomAccessFile(source, "r"); //源文件流读模式 System.out.println("从保存文件对话框中选择目标文件..."); if(chooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION){ target = chooser.getSelectedFile().toString(); System.out.println("选中的目标文件是:" + target); if (source.equals(target)){ JOptionPane.showMessageDialog( null, "源文件与目标文件路径相同,无法复制"); throw new Exception("源文件与目标文件路径相同"); }
String str; str = JOptionPane.showInputDialog("请输入一个字符串:" ); if (str == null || str.equals("")){ System.exit(0); } int option; option = JOptionPane.showConfirmDialog( null, "确定要删除"+ str +"吗?"); if (option == JOptionPane.YES_OPTION){ JOptionPane.showMessageDialog(null, "您选择了确定删除"); str = null; } else{ JOptionPane.showMessageDialog(null, "您选择了不删除"); }
类要序列化必须实现Serializable接口,它没有任何成员。 实现Serializable接口的类对象才能进行输入输出操作,才能记录、传输和 保存对象。 对象输入输出操作涉及: ◦ ObjectOutputStream流,调用其writeObject(Object) 方法,可以将 对象写入流中(序列化操作)。如果对象输出流与文件关联,则对象便 能保存到文件中。 ◦ ObjectInputStream流,调用其readObject()方法,可以读取流中的对 象(反序列化)。如果对象输入流与文件关联,则可将读取保存在文件 中的对象。
关于流的操作,通常有3步:
java.io包中关于文件操作的常用类:
◦ 建立流对象 ◦ 调用流的读/写方法进行数据传输(即输入/输出) ◦ 关闭流
(1)File (2)FileInputStream (3)FileOutputStream (4)FileReader (5)FileWriter (6)RandomAccessFile
任务预览 数据流 文件输入输出流 文件对话框与常用对话框 随机访问文件 序列化与对象输入输出 本章小结 实训12:文件复制与对象读写 本章实训程序运行结果: Nhomakorabea
流是有方向的,分: ◦ 输入流,用于读取数据源的数据; ◦ 输出流,用于把数据写入目的地。 流本质是字节序列的封装,有两种类型: ◦ 字节流,是对二进制字节进行读写的对象。 ◦ 字符流,按一定编码格式以字符为单位进行操作。 因此有4种基本的流: (1)字节输入流,由InputStream子类构建。 (2)字节输出流,由OutputStream子类构建, (3)字符输入流,由Reader子类构建, (4)字符输出流,由Writer子类构建。
RandomAccessFile output = new RandomAccessFile( target, "rw"); //目标文件 int aByte; while((aByte = input.read())!= -1){ //循环读源字节直到末尾 output.write(aByte); //把所读的字节写到目标流 } System.out.println("----已成功把源文件复制到目标文件!"); output.close(); //关闭目标文件流 } input.close(); //关闭源文件流 } } catch(Exception e){ …} finally{..."----程序结束。");}