文件输入输出流
流式输入输出与文件处理
System类中提供了如下方法重新设置标准流对象: • static void setIn(InputStream in) :重新定义标准输入流 • static void setErr(PrintStream err) :重新定义标准错误输出 • static void setOut(PrintStream out) :重新定义标准输出
InputStreamReader InputStream 将面向字节的输入流类Reader的主要子类及说明(续)
FileReader
文件对象或字符串表 文件作为输入源 示的文件名
PipedReader StringReader
PipedWriter的对象 字符串
与另一输出管道相连, 读取另一管道写入的 字符
DataInputStream in=new DataInputStream(file); try { while(true) { int n1=in.readInt(); int n2=in.readInt(); System.out.println(n1+","+n2); } } catch (EOFException e) { in.close();} } catch (IOException e) { } }}
public static void main(String args[]) { int number=0; final int size=Integer.parseInt(args[1]);
byte[] b = new byte[size];
try { FileInputStream infile = new
文件流概念理解
文件流(File Stream)是计算机编程中用于处理文件的一种抽象概念。
它是一种将文件内容视为连续数据流的方式,允许程序以顺序或随机访问的方式读取或写入文件。
文件流通常被用于读取和写入文件,包括文本文件、二进制文件等。
在许多编程语言中,文件流通常由相应的文件流类(File Stream Class)来表示和操作。
通过文件流类,程序可以打开文件、读取文件内容、写入数据到文件、移动文件指针等操作。
常见的文件流类包括输入流(Input Stream)用于读取文件内容,输出流(Output Stream)用于向文件写入数据等。
文件流的概念使得程序能够以流的方式对文件进行操作,这种连续的方式更符合文件数据在磁盘上存储的实际情况,同时也提供了灵活性和效率。
通过文件流,程序可以按照需要从文件中读取数据,并且可以动态地向文件中写入数据,实现了对文件的灵活管理。
总的来说,文件流是一种对文件进行读写操作的抽象概念,它提供了一种便捷而灵活的方式来处理文件数据,是编程中常用的重要概念之一。
C语言中的输入输出流及其应用
C语言中的输入输出流及其应用C语言是一种广泛应用于软件开发领域的编程语言,其提供了丰富的输入输出(I/O)函数和流(stream)的概念,以帮助开发者实现与用户或环境的交互。
本文将详细介绍C语言中的输入输出流及其应用。
一、输入流输入流用于接收外部数据供程序使用。
C语言提供了丰富的输入函数,包括:1. scanf函数:scanf函数用于从标准输入流(键盘)读取数据,并根据格式化字符串的指定将数据存储到指定的变量中。
例如:```cint age;scanf("%d", &age);```上述代码将从标准输入流读取一个整数,并将其存储到变量age中。
2. fgets函数:fgets函数用于从文件流或标准输入流中读取一行字符串并存储到指定的字符数组中。
例如:```cchar name[100];fgets(name, sizeof(name), stdin);```上述代码将从标准输入流读取一行字符串,并将其存储到字符数组name中。
二、输出流输出流用于向外部输出数据。
C语言提供了多种输出函数,包括:1. printf函数:printf函数用于向标准输出流(屏幕)输出格式化的数据。
例如:```cint num = 10;printf("The number is: %d\n", num);```上述代码将输出"The number is: 10"。
2. fputs函数:fputs函数用于向文件流或标准输出流中输出字符串。
例如:```cchar message[] = "Hello, world!";fputs(message, stdout);```上述代码将字符串"Hello, world!"输出到标准输出流。
三、文件流除了标准输入输出流外,C语言还支持文件流,用于读写文件。
文件流的操作需要使用文件指针,并且需要注意文件的打开和关闭。
c++文本文件打开读写的常用方法
c++文本文件打开读写的常用方法一、文本文件的打开1、使用C++中标准的文件输入和输出流操作文本文件<iostream>头文件提供标准文件输入输出流std::cin,std::cout,std::cerr,std::clog这些标准输入输出流是指C++语言中自带的几个文件输入输出流。
比如在程序中,若要从控制台读取输入:std::cin >> a;这条语句将从控制台(也就是键盘)获取输入,并将其输入存储在a中。
如果要从文件中读取数据,可以使用标准输入流std::ifstream 完成。
std::ifstream可以被用来从文件中读取输入。
具体实现方法如下:// step 1: include the input stream#include <fstream>// step 2: open filestd::ifstream infile('file.txt');// step 3: read input from fileint data;infile >> data;// step 4: close fileinfile.close();2、使用C++的平台独立文件输出流操作文本文件C++中有一套不依赖具体平台的文件输入输出流。
它们是std::fstream,std::ifstream和std::ofstream。
这三个类分别用来操作文件的输入流,输出流和读写流。
具体使用方法如下:// step 1: include the input/output stream#include <fstream>// step 2: open filestd::fstream f('file.txt', std::ios::in | std::ios::out); // step 3: read/write to filechar c;f.get(c);f.put(c);// step 4: close filef.close();二、文本文件的读取要将文本文件读入内存,程序需要打开文本文件,然后以块的形式从磁盘加载到内存。
基于Java文件输入输出流实现文件上传下载功能
基于Java⽂件输⼊输出流实现⽂件上传下载功能本⽂为⼤家分享了Java实现⽂件上传下载功能的具体代码,供⼤家参考,具体内容如下前端通过form表单的enctype属性,将数据传递⽅式修改为⼆进制”流“的形式,服务端(servlet)通过 getInputStream() 获取流信息,运⽤java I/O 流的基础操作将流写⼊到⼀个服务端临时创建的⽂件temp中,然后再次利⽤⽂件基本操作,读取并截取临时⽂件内容,根据其中信息创建相应的⽂件,将读取出来的具体信息写⼊,下载时,根据提交的⽂件名称,找到服务器端相应的⽂件,然后根据输出流outStream输出到页⾯,同时将servlet的响应类型和响应头进⾏设置。
具体传输流程如下图:流信息的部分为:具体代码如下:前端代码:<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><script src="Js/jquery.js"></script></head><body><form action="FileUpServlet" method="post" enctype="multipart/form-data"><table><tr><td>请选择上传⽂件:</td><td><input id="myfile" name="myfile" type="file" value="" /></td><td><input type="submit" value="上传"></td></tr><tr><td>${info}</td></tr></table></form>⽂件下载:<a href="FileLoadownServlet?filename=${filename}">${filename}</a></body></html>上传servlet部分(核⼼)@WebServlet("/FileUpServlet")public class FileUpServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public FileUpServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");InputStream filesource = request.getInputStream();//request获取流信息String tempname = "D:/temp";//tempfile代表临时存放⽂件File tempfile = new File(tempname);//创建临时⽂件FileOutputStream outputStream = new FileOutputStream(tempfile);//输出流对象,指定输出指tempfile⽬录下byte b[] = new byte[1024];int n;while((n = filesource.read(b))!= -1)//从输出流中每次读取1024字节,直⾄读完{outputStream.write(b,0,n);}outputStream.close();filesource.close();//关闭输⼊输出流/*以下为具体的⽂件操作,主要为解析临时产⽣的 temp⽂件,知识多为java输⼊输出流的内容!*/RandomAccessFile randomfile = new RandomAccessFile(tempfile, "r");//随机流,指定要读临时⽂件,只读randomfile.readLine();//读取第⼀⾏,⽆效数据,不需要String str = randomfile.readLine();//读取第⼆⾏int beginIndex = stIndexOf("=")+2;//指定所需数据的开始位置int endIndex = stIndexOf("\"");//指定所需数据截⾄位置String filename = str.substring(beginIndex,endIndex);//截取⽂件名//重新定位⽂件指针,获取⽂件内容randomfile.seek(0);//⽂件指针从头开始long startext = 0;int i = 1;//⽂件内容开始位置while((n=randomfile.readByte()) != -1&&i <= 4){if(n=='\n'){startext = randomfile.getFilePointer();i++;}}startext = randomfile.getFilePointer() - 1;//获取⽂件内容结束位置randomfile.seek(randomfile.length());long endtext = randomfile.getFilePointer();int j = 1;while(endtext >= 0 && j <= 2){endtext--;randomfile.seek(endtext);if(randomfile.readByte()=='\n'){j++;}}endtext = endtext-1;//将临时⽂件保存⾄指定⽬录中String realpath = getServletContext().getRealPath("/")+"images";//设置⽂件保存⽬录System.out.println(realpath);File fileupload = new File(realpath);if(!fileupload.exists()){fileupload.mkdir();//⽬录不存在则创建}File savefile = new File(realpath,filename);RandomAccessFile randomAccessFile = new RandomAccessFile(savefile, "rw");randomfile.seek(startext);while(startext<endtext){randomAccessFile.write(randomfile.readByte());//⽂件写⼊startext = randomfile.getFilePointer();}//关闭各种输⼊输出流randomAccessFile.close();randomfile.close();tempfile.delete();//删除临时⽂件SimpleDateFormat timed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date nowdate = new Date();String time = timed.format(nowdate.getTime());request.setAttribute("info", time+" "+filename+"上传成功!");request.setAttribute("filename", filename);request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}下载部分protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubString filename = request.getParameter("filename");String path = getServletContext().getRealPath("/")+"images/";File file = new File(path+filename);//找到⽂件if(file.exists())response.setContentType("application/x-msdownload"); //设置响应类型,此处为下载类型response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打开 InputStream inputStream = new FileInputStream(file);ServletOutputStream outputStream = response.getOutputStream();byte b[] = new byte[1024];int n;while((n = inputStream.read(b)) != -1){outputStream.write(b,0,n);}outputStream.close();inputStream.close();}else{request.setAttribute("result", "⽂件不存在!下载失败!");request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
文件的输入和输出
阻止程序继续向下运行,一直到有数据读取为止。常用的两种read方法:
public int read( byte[]b)throws IOException .
此方法的作用是读取当前流对象的数据,并把读取到的数据依次存储到数组b中,流中已经读取过得数据会被删除,后续的
出到数据源。当流关闭时,输出流内部的数据会被强制输出。
在字节输出流outputstream中,常见的方法有:
flush方法:public void flush()throws IOException
该方法的作用是将当前流对象中的缓冲数据强制输出。使用该方法可以实现立即输出。
write的方法常用的有两种:
数据会变成流中的第一个字节。而实际读取的字节数量则作为方法的返回值返回。
public int read(byte[]b,int off,int len)throws IOException
这种方法也是将读取的数据存储到b中,只是将流中第一个数据存储到b中下标为off的位置,最多读取len个数据,而实际
public int write( byte[]b)throws IOException .
该方法的作用是将数组b中的数据依次写入当前的流对象中。
public int write(byte[]b,int off,int len)throws IOException
该方法的作用是将数组b中从下标为off(包含)开始,后续长度为len个的数据依次写入流对象中。
3.字符输出流Writer
字符输出流Writer和字节输出流outputstream功能上类似,不同的是Writer每次写入的最少是一个字符(两个字节)的
C语言的输入输出流
C语言的输入输出流C语言作为一种面向过程的编程语言,其输入输出流(Input/Output Stream)是非常重要的概念。
输入输出流允许我们在程序中与用户交互,从用户处接收输入并向用户展示输出。
本文将探讨C语言中的输入输出流相关的概念和函数,以及如何在程序中使用它们。
一、标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)C语言中,有三个预定义的输入输出流,分别是标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。
它们分别被定义为文件指针,可以通过它们来进行输入和输出操作。
1. 标准输入流(stdin)标准输入流(stdin)用于从用户处接收输入。
在C语言中,我们可以使用`scanf()`函数来从标准输入流读取输入数据。
```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("您输入的整数是:%d\n", num);return 0;}```在这个例子中,`scanf()`函数用于从标准输入流(stdin)中读取一个整数,并将其存储到变量`num`中。
然后,我们使用`printf()`函数将输入的整数输出到标准输出流(stdout)上。
2. 标准输出流(stdout)标准输出流(stdout)用于向用户展示输出。
在C语言中,我们可以使用`printf()`函数向标准输出流打印输出。
```c#include <stdio.h>int main() {printf("Hello, world!\n");return 0;}```在这个例子中,`printf()`函数用于向标准输出流(stdout)打印字符串"Hello, world!",并在字符串的末尾添加一个换行符。
输入输出流(带仓库系统作业)
4
2.2 查询文件属性
File 类提供了几个方法, 查询文件属性: – 文件是否存在 – 文件是否读保护 – 文件是否写保护 – 文件是否是一个目录 – 文件是否隐藏
myFileStream = new FileInputStream(myFile);
8
3.2 处理 I/O 异常
必须使用catch 块检测并处理I/O 异常( IOException ), 如: try {
FileInputStream ins=
new FileInputStream (“myfile.dat"); } catch (IOException e) {
//文件I/O 错误 System.out.println(“File read error: ” +e); }
9
3.3 从 FileInputStream中读出
read() 的成员函数 : int read() //读取一个字节
//到达输入流末尾时, 返回-1 int read(byte b[]) //把多个字节读到字节数组中
Attr.java
6
3. FileInputStream
FileInputStream典 型 地 表 示 一 种 顺 序 访 问 的 文 本 文 件。 通过 使 用FileInputStream 你 可 以 访 问 文 件 的 一 个 字 节、 几 个 字 节或 整 个 文 件。
由InputStream 派生的类
String(buffer,0,b,"Default"); System.out.println(str); }catch(UnsupportedEncodingException e) { System.out.println("the encoding was not found: "+e); } }catch (IOException e) { System.out.println("File read Error"); }
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语言输入流和输出流的简述,输入流用于获取外部数据输入到程序中,输出流用于将程序中的数据输出到外部设备。
C++文件输入输出流
C++文件输入输出流文件操作在操作系统的底层中十分复杂。
然而,C++已经为我们做了文件操作的绝大部分工作。
程序员只要以流的概念来实施文件操作即可。
文件有两种,一种是文本文件,其内容总是与字符码表(如ASCII码)对应。
另一种是二进制文件,可以将内容看成0/1串。
本次课我们只讨论C++中文本文件的读写。
一、文件输入流类ifstreamI ifstream是文件输入流类的类名。
定义一个该类的对象,即可将该对象和一个文件建立联系。
例如,ifstream fin(“a.txt”)表示定义一个文件输入流类的对象fin,并将该对象与当前目录下的a.txt文件建立联系,以后可以用该对象从a.txt中读取数据。
【例1 按行读取一个文本文件的所有内容,并输出到屏幕。
】#include <iostream>#include <fstream> //使用ifstream类需要包含头文件fstream#include <string> //使用string类需要包含头文件stringusing namespace std;int main(){ifstream fin("in.txt"); //默认打开文本文件string str;while (getline(fin, str)){cout<<str<<endl;}return 0;}getline(fin, str)表示从输入文件流中读入一行数据,放入string类型的变量str 中。
由于整行整行地读入,读入到str中时,文件中的每个换行符都被丢掉了。
为了照文件原样输出,在cout流上输出str的同时,还要再补上一个回车符。
许多输入/输出语句都能返回操作状态(true或false),例如if (cin>>a)cout<<a; //若读入失败,则跳过cout<<a;if (getline(in, str)cout<<str; //若读入失败,则跳过cout<<str;if (cin)cin>>a; //若文件流状态正常,则输入所以在循环读入数据时,常常将读入操作放在循环的条件判断上,这样既省事,又明白。
第15章 文件的输入输出
文件字节输入输出流是FileInputStream和FileOutStream,这 是InputStream和OutputStream的子类。使用这两个类就可以 将从一个指定的文件中读取或者向某一个文件中写入数据。 如果创建FileInputStream或者是FileOutputStream对象实例, 必须要指定文件的路径和文件名,对象被创建之后,流就会 被打开。程序的结尾如果不再使用流操作,必须要关闭流, 以释放资源。
15.4.2 字符输入、输出流 字符输入、
可以使用Reader和Writer的子类InputStreamReader和 OutputStreamWriter来进行字符的处理,也就是按照字符 为基本单位进行读写操作,并且可以实现字符流和字节流 之间的转化,字符流操作比字节流效率要高。 使用InputStream和OutputStream对象为构造方法的参数 创建InputStreamReader和OutputStreamWriter变量可以 直接读取文本,而不需要自己再判断字符编码。
15.5.4 RandomAccessFile应用 应用
RandomAccessFile类在随机(相对顺序而言)读写等长记 录格式的文件时有很大的优势,如读取数据库中的某一条 记录时。但是RandomAccessFile类仅限于操作文件,不 能访问其他的IO设备,如网络,内存映象等。
学习如何读取和写入数据之前,首先需要了解一个文件操 作的工具类File类,该类既可以处理数据文件也可以处理 目录,并且通过该类可以列出File实例所代表的目录下所 有的文件名。在处理一个目录之前,首先要做的就是创建 一个File的实例用于表示该目录。语法如下: File file=new File(“src”);
符流支持Unicode标准字符集,如果进行文本读写,通 常要使用Reader和Writer的子类时要重新定义相关的方法 。而Reader和Writer只提供了用于字符流处理的接口,而 不能生成实例。只可以通过他们的子类对象来处理字符流 。 Reader是Java语言中字符输入流所有类的父类,该类是抽 象类,不能被实例化。
第11章文件操作和输入输出流18页PPT
• 除了和磁盘文件直接相关的文件流以外,流有多种类型,
流可以分布在网络中,内存中或者是磁带中。
IO 命名空间和它类
IO 命名空间包含便于在数据流和文件中读
取和写入数据的类
IO 命名空间中用于文件目录操作类
目标
IO框架结构 对目录和文件的创建、读、写和更新操作 File和Directory静态类的使用 FileInfo和DirectoryInfo的实例对象的应用 字节流和字符流的处理 目录管理 文件管理
体验
程序运行后,在c盘下生成一个text.txt文件 。程序向该文件中输入10000行的记录。记 录输入完成后,程序把文件的所有记录显 示在控制台上。sybyjgw
文件和流
文件 • 文件是一些具有永久存储及特定顺序的字节组成的一个有
序的、具有名称的集合。
• 在各种介质上(可移动磁盘、硬盘、CD 等)存储的集合
数据。
• 通常情况下文件按照树状目录进行组织,每个文件都有文
件名、文件所在路径、创建时间、访问权限等属性。
流 • 流提供了连续的字节流存储空间,虽然数据实际存储的位
•
try
•
{
•
if (Directory.Exists(target))
•
{ Directory.Delete(target, true);
•
Console.WriteLine("Path:{0} is deleted.", path);
•
}
•
if (!Directory.Exists(path))
BinaryReader 和BinaryWriter 类,用于按二进制模式读写
第7章输入输出流
(3) cout流在内存中对应开辟了一个缓冲区, 用来存放流中的数据,当向cout流插入一个 endl时,不论缓冲区是否已满,都立即输出 流中所有数据,然后插入一个换行符,并刷 新流(清空缓冲区)。 (4) 在iostream中只对“<<”和“>>”运算符 用于标准类型数据的输入输出进行了重载, 但未对用户声明的类型数据的输入输出进行 重载。
7.2 标准输出流
标准输出流是流向标准输出设备(显示器)的 数据。
7.2.1 cout,cerr和clog流
1. cout流对象 cout是console output的缩写,意为在控制 台(终端显示器)的输出。 (1) cout不是C++预定义的关键字,它是 ostream流类的对象,在iostream中定义。 (2) 用“cout<<”输出基本类型的数据时,可 以不必考虑数据是什么类型,系统会判断数 据的类型,并根据其类型选择调用与之匹配 的运算符重载函数。
2. cerr流对象 cerr流对象是标准错误流。cerr流已被指定 为与显示器关联。cerr的作用是向标准错误 设备(standard error device)输出有关出错 信息。cerr流中的信息只能在显示器输出。 当调试程序时,往往不希望程序运行时的出 错信息被送到其他文件,而要求在显示器上 及时输出,这时应该用cerr。cerr流中的信 息是用户根据需要指定的。
例7.5 通过测试cin的真值,判断流对象是否 处于正常状态。
#include <iostream> using namespace std; int main( ) {float grade; cout<<″enter grade:″; while(cin>>grade)//能从cin流读取数据 {if(grade>=85) cout<<grade<<″GOOD!″<<endl; if(grade<60) cout<<grade<<″fail!″<<endl; cout<<″enter grade:″; } cout<<″The end.″<<endl; return 0; }
文件输入输出流
文件输入输出流文件输入输出流是在计算机中进行文件读写操作的一种机制。
通过文件输入输出流,我们可以从文件中读取数据或者将数据写入文件中。
在程序开辟中,文件输入输出流常用于读取配置文件、读取和写入日志文件、进行数据持久化等操作。
文件输入输出流的基本概念和使用方法如下: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"的文件中。
C++中输入输出流及文件流操作总结
C++中输⼊输出流及⽂件流操作总结本⽂实例为⼤家分享了C++中输⼊输出流及⽂件流操作笔记,供⼤家参考,具体内容如下1、流的控制iomanip 在使⽤格式化I/O时应包含此头⽂件。
stdiostream ⽤于混合使⽤C和C + +的I/O机制时,例如想将C程序转变为C++程序2、类继承关系ios是抽象基类,由它派⽣出istream类和ostream类, iostream类⽀持输⼊输出操作,iostream类是从istream类和ostream类通过多重继承⽽派⽣的类类ifstream继承了类istream,类ofstream继承了类ostream,类fstream继承了类iostreamiostream头⽂件中4种流对象cout补充1、⽤“cout<<”输出基本类型的数据时,可以不必考虑数据是什么类型,系统会判断数据的类型并根据其类型选择调⽤与之匹配的运算符重载函数。
这个过程都是⾃动的,⽤户不必⼲预。
如果在C语⾔中⽤prinf函数输出不同类型的数据,必须分别指定相应的输出格式符,⼗分⿇烦,⽽且容易出错2、cout流在内存中对应开辟了⼀个缓冲区,⽤来存放流中的数据,当向cout流插⼈⼀个endl时,不论缓冲区是否已满,都⽴即输出流中所有数据,然后插⼊⼀个换⾏符,并刷新流(清空缓冲区)。
注意如果插⼈⼀个换⾏符”\n“(如cout<<a<<"\n"),则只输出和换⾏,⽽不刷新cout 流(但并不是所有编译系统都体现出这⼀区别)。
3、在iostream中只对"<<"和">>"运算符⽤于标准类型数据的输⼊输出进⾏了重载,但未对⽤户声明的类型数据的输⼊输出进⾏重载。
如果⽤户声明了新的类型,并希望⽤"<<"和">>"运算符对其进⾏输⼊输出,按照重运算符重载来做。
输入流与输出流
第八章 输入与输出流
键盘 程序
数据文件
屏幕 数据文件
综上所述,程序是数据处理中心。 无论是从键盘上读取数据或者从数据文件中读取数据都是由程序决定的。 把程序中的数据输出到屏幕上或者输出到数据文件中都是由程序决定的。
2
第八章 输入与输出流
8.1 流的概念
❖ 输入与输出流(I/O流) (1)输入流:把键盘上输入的数据或者是把数据文件中的数据 读入正在运行的程序中。(网络) (2)输出流:把正在运行的程序中的数据输出到屏幕上或者 输出到数据文件中。
5
第八章 输入与输出流
8.1 流的概念
❖ 字符流类:专门用于字符数据 ❖ 字节流类:用于一般目的
6
10.1 File类
首先讨论10.1.3节的内容,如何使用File类创建对象。对象可以是文件对象, 也可以是目录对象。
(1) 使用一个存在的文件创建一个文件对象;10.1.3 File f=new File("Example10_1.java"); 当前目录下已经存在文件: Example10_1.java
write方法的格式如下: public void write(byte b[]); public void write(byte b[],int off,int len);
作为字节流输入对象的文件,采用read方法按节读入到程序中;
作为字节流输出对象的文件,采用write方法按字节把程序的数据输出到字节 流输出对象的文件中;
10
第八章 输入与输出流
§10.1.4 使用Runtime 类运行可执行文件
◆用Runtime 类声明一个对象( Runtime类在ng包) Runtime ec;
◆ 然后使用该类的getRuntime()静态方法创建这个对象: ec=Runtime.getRuntime();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++中的文件输入/输出收藏简介本教程将以C++最基本的文件I/O(输出/输出)开始。
此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。
你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。
你的第一个程序首先我将给出一段代码,接着再逐行进行解释。
我们的第一个程序将建立一个文件,并写入一些字符:#include <fstream.h>void main() //程序从这里开始运行{ofstream SaveFile(“cpp-home.txt”);SaveFile << “Hello World, from and Loobian!”;SaveFile.close();}仅仅如此吗?没错!这个程序将在当前运行目录下建立一个名为cpp-home.txt的文件,并向它写入“Hello World, from and Loobian!”。
下面给出各行的含义:#include <fstream.h>——你需要包含此文件以使用C++的文件输入/输出函数。
注意:一旦包含了这个文件,你不再需要(为了使用cout/cin)包含iostream.h,因为fstream.h已经自动包含了它。
在这个头文件中声明了若干个类,包括ifstream,ofstream及fstream,它们都继承自istream 和ostream类。
ofstream SaveFile(“cpp-home.txt”);1)ofstream即“output file stream(输出文件流)”。
它将建立一个句柄(handle),以便我们以后能以一个文件流的形式写入文件。
2)SaveFile——这是文件句柄的名字,当然,你还可以换用任何一个你想要的名称。
3)(“cpp-home.txt”); ——打开名为cpp-home.txt的文件。
如果程序运行的当前目录已经存在这样一个文件,则它将被替换掉;万一不存在,程序也会为你创建一个为文件,你不必为此而担心。
现在,让我们稍微深入一点点。
首先,我要指出的是:ofstream是一个类。
因此ofstream SaveFile(“cpp-home.txt”);这一语句将创建一个该类的对象;而我们在括号中所传递的参数实际上将传给构造函数:在这里我们将我们要建立的文件的名称作为实际参数传递给了该类的构造函数。
当然,我们还可以传递其它的一些信息,不过我以后再对其进行讲解。
SaveFile << “Hello World, from and Loobian!”;——“<<”看起来是不是很亲切?不错,想必你已经在cout << 中见到过。
这是一个预定义好的运算符。
不管怎么说,这行语句所做的,是将上面的那段文本写入文件。
正如前面所提到的,SaveFile是一个文件句柄,它关联一个打开的流式文件。
所以,我们只须输入句柄名,再跟着输入“<<”,然后接着写下一串用引号括起来的文本,就可以实现对文件的写入。
如果我们想写入的是某个变量的值而不是带引号的文本,也只须像通常使用cout << 一样将变量传递给句柄对象,像这样:SaveFile << variablename;就可以了!SaveFile.close();——既然我们打开了一个流文件,那么当我们用完它之后,就必须关闭它。
SaveFile是ofstream类的一个对象,而该类(ofstream)有一个用于关闭文件的成员函数,即close() 函数。
因此,我们只要依次输入文件句柄名,点号和close(),就可以关闭该文件!注意:一旦你关闭文件,在你重新打开它以前,就再不能对它进行访问。
以上就是一个可以写文件的最简单程序。
的确很容易!不过,正如你即将在以后部分的教程中所看到的,还有更多的东西要学呢!读取文件你已经看到了应该如何写文件。
现在,当我们已经得到cpp-home.txt文件时,我们将要读取它,并且将内容打印在屏幕上。
首先,我要指出的是,有很多种方法可以读取文件。
以后我会向你们介绍所有的方法(就我所知的)。
此刻,我先向你展示最佳的方法(我认为的)。
正如你已经熟悉的——我将首先给出一段程序代码,然后,我会详细地对它进行解释说明:#include <fstream.h>void main() //程序从这里开始{ifstream OpenFile("cpp-home.txt");char ch;while(!OpenFile.eof()){OpenFile.get(ch);cout << ch;}OpenFile.close();}你想必已经了解首行的意义所在,而剩下的部分将由我为你解释。
ifstream OpenFile(“cpp-home.txt”) ——我猜它对现在的你而言多少会熟悉些!ifstream表示“input file stream(输入文件流)”。
在前一节的程序中,出现的则是ofstream,它的意义是“output file stream(输出文件流)”。
前一节的程序是进行文件的写操作,这就是它用“output(输出)”来表示的原因。
而本节的程序则是读取一个文件,这就是它用“input(输入)”来表示的原因。
这一行剩下的代码于你而言应当是熟悉的了:OpenFile是ifstream类的一个对象,它将关联一个输入文件流;而用引号括住的内容,就是将要打开的文件的名称。
请注意:这里没有对要打开的文件是否存在进行测试!以后我将向你指出如何进行检测。
char ch; ——声明一个字符数组(array of type char)。
只是有一点要提醒你:这样的数组(arrays)只能存储一个ASCII字符。
while(!OpenFile.eof()) ——如果已经到达文件末尾,eof( )函数将返回一个非零值。
因此我们所设计的这个循环将一直持续,直至我们的文件操作到达文件末尾。
这样我们就可以遍历整个文件,以便对它进行读取。
OpenFile.get(ch); ——OpenFile是类ifstream的一个对象。
该类声明了一个名为get( )的成员函数。
只要我们拥有该对象,我们自然就可以调用这个函数。
get( )函数从相应的流文件中读出一个字符,并将其返回给变量。
在本例中,get( )函数只带一个参数——用于存储所读取的字符的变量。
所以,调用OpenFile.get(ch)后程序将会从OpenFile流中读取一个字符并存入变量ch中。
注意:如果你再次调用该函数,它将读取下一个字符,而不是原来的那一个!你过后将理解为什么会这样。
这就是我们要不断反复循环直至读操作到达文件尾的原因。
每循环一次,我们将读出一个字符并将它保存在ch中。
cout << ch; ——显示ch变量值,它保存了读取得到的字符。
File.close(); ——我们打开了一个流式文件,就需要关闭它。
使用close()函数即可将它关闭,这和前一节的一样!注意:一旦你关闭了一个文件,在你重新打开它之前,你不能再对它进行访问。
大功告成了!我希望你能明白我的解释。
当你编译并运行这个程序的时候,它应当会输出:“Hello World, from and Loobian!”掌握输入/输出流在这一章里,我会提及一些有用的函数。
我将为你演示如何打开一个可以同时进行读、写操作的文件;此外,我还将为你介绍其它打开文件的方法,以及如何判断打开操作是否成功。
因此,请接着往下读!到目前为止,我已为你所展示的只是单一的打开文件的途径:要么为读取而打开,要么为写入而打开。
但文件还可以以其它方式打开。
迄今,你应当已经认识了下面的方法:ifstream OpenFile(“cpp-home.txt”);噢,这可不是唯一的方法!正如以前所提到的,以上的代码创建一个类ifstream的对象,并将文件的名字传递给它的构造函数。
但实际上,还存在有不少的重载的构造函数,它们可以接受不止一个的参数。
同时,还有一个open()函数可以做同样的事情。
下面是一个以上代码的示例,但它使用了open()函数:ifstream OpenFile;OpenFile.open(“cpp-home.txt”);你会问:它们之间有什么区别吗?哦,我曾做了不少测试,结论是没有区别!只不过如果你要创建一个文件句柄但不想立刻给它指定一个文件名,那么你可以使用open()函数过后进行指定。
顺便再给出一个要使用open()函数的例子:如果你打开一个文件,然后关闭了它,又打算用同一个文件句柄打开另一个文件,这样一来,你将需要使用open()函数。
考虑以下的代码示例:#include <fstream.h>void read(ifstream &T) //pass the file stream to the function{//the method to read a file, that I showed you beforechar ch;while(!T.eof()){T.get(ch);cout << ch;}cout << endl << "--------" << endl;}void main(){ifstream T("file1.txt");read(T);T.close();T.open("file2.txt");read(T);T.close();}据此,只要file1.txt和file2.txt并存储了文本内容,你将看到这些内容。
现在,该向你演示的是,文件名并不是你唯一可以向open()函数或者构造函数(其实都一样)传递的参数。
下面是一个函数原型:ifstream OpenFile(char *filename, int open_mode);你应当知道filename表示文件的名称(一个字符串),而新出现的则是open_mode(打开模式)。
open_mode的值用来定义以怎样的方式打开文件。
下面是打开模式的列表:名称描述ios::in 打开一个可读取文件ios::out 打开一个可写入文件ios::app 你写入的所有数据将被追加到文件的末尾,此方式使用ios::outios::ate 你写入的所有数据将被追加到文件的末尾,此方式不使用ios::outios::trunk 删除文件原来已存在的内容(清空文件)ios::nocreate 如果要打开的文件并不存在,那么以此参数调用open()函数将无法进行。