首先还是先完整的学习一下文件打的所有方式。
文件的打开方式是由,w,a,t,b,+,六个字符组成。如下:
“r” 只读打开文件,如果文件不存在,返回一个错误.
“r+” 可读写打开文件,如果文件不存在,返回错误.
“w” 只写打开文件,如果文件不存在,则创建一个新的文件,如果已经存在,将里面的内容清空.
“w+” 可读写打开文件,如果文件不存在,创建新文件,如果已经存在,清空文件中的内容.
“a” 以追加写入的方式打开文件(在文件未尾追加写入数据) ,如果文件不存在,创建新文件.
“a+” 以可读取并且可追加写入的方式打开文件,如果不存在,创建新文件.
如果要指定打开文本文件,则在打开方式中加入’ t ‘ 字符.如果是二进制文件,则加入’ b ‘ 字符. 如下:
1
"rt" "rt+" "r+t" "rb" "rb+" "r+b"
当以追加方式打开文件时,文件的数据偏移指针会指向文件的最未尾,如果此时从文件读入数据,可能会失败,都已经文件未尾了,还有什么数据要读的?所以追加方式打开时,不要第一时间读入数据.
注意: 如果想打开文件后,先读取数据,然后再写入,请不要用”w+”的方式,因为”w”方式会把已存在的文件的数据清空,所以会发生读取错误.
基于上面介绍,我们这章要从一个文本文件中读取数据,所以使用下面代码打开文件:
1
2
3
4
FILE * fptr;
fptr = fopen( FILE_NAME , "rt" );
.....
fclose( fptr );
读取文件的函数原型如下:
1
2
int fgetc( FILE* fstream);
char* fgets( char* buf , int n , FILE* fstream);
fgetc() 返回读到的字符的ASCII码.
在fgets()中,buf参数用来指定一个字符串指针来接收读到的数据,参数n用来指定读入的最大字符数.
fgets() 返回读到的字符串指针.如果错误,返回NULL.
并且,我们可以用feof()函数来判断是否已经读到了文件的未尾.
1
int feof( FILE* fstream);
如果已经读到文件未尾,feof()返回非0值(也就是TRUE值),如果没有,返回0(FALSE);
学完了上面,我们现在准备一个data.txt文件,内容可以,也可以你喜欢的任何内容:
1
2
3
1234567890
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
请把data.txt文件与程序一起放在同一个文件夹,否则会有打开data.txt文件错误
然后编写一个程序,代码如下:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
本程序中涉及到的fputc() 和 fputs()函数在上一章已经作了介绍,可自行查阅.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "data.txt" //文件名
#define BUFSIZE 27 //缓存的大小为27字节
int main( int argc , char* argv[])
{
FILE *fptr;
char buf[BUFSIZE];
char ch;
fptr = fopen( FILENAME , "r+t");
if ( fptr == NULL )
{
puts( "open file error");
exit(1);
}
do{
ch = fgetc( fptr);
fputc(ch , stdout);
}while( ch != 'n' );//如果读到换行符,就退出循环.
while( ! feof( fptr) ){//如果读到文件未尾,就退出循环.
memset ( buf , 0 , BUFSIZE);
fgets( buf , BUFSIZE -1 , fptr );
//之所以要限制读入的数据长度为BUFSIZE-1,因为buf字符串的最后一个字符必须为'',防止被读入的数据覆盖.
fputs( buf , stdout);
}
fclose( fptr);
getchar();//程序暂停,按下回车键后继续
return 0 ;
}
把代码复制到编译环境中编译后,把执行程序放在与data.txt相同的文件夹,然后运行,就会看到效果了.
『贰』 c语言怎么读取文件内容并且计算
主要通过fscanf,fprintf格式化输入输出函数实现,主要代码如下,
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *pf=NULL;
char name[20];//存储用户名
float salary=0;//存储工资
pf=fopen("test.txt", "r+" );//test.txt文件中内容为kobe 90000.80
if(!pf)
{
printf("打开文件失败,程序退出!");
exit(1);
}
fscanf(pf,"%s %f",name,&salary);
salary*=0.9;//处理工资,例如扣除五险、扣税等。
fprintf(pf,"\n%f",salary);//写入test.txt文件中
printf("%s %f\n",name,salary);//输出kobe 81000.718750
if(pf)//关闭文件
{
fclose( pf);
pf=NULL;
}
return 0;
}
int fscanf( FILE *stream, const char *format, ... );函数fscanf()以scanf()的执行方式从给出的文件流中读取数据,
fscanf()的返回值是事实上已赋值的变量的数,如果未进行任何分配时返回EOF。
int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送参数到由stream指定的文件。fprintf()只能和printf()一样工作,
fprintf()的返回值是输出的字符数,发生错误时返回一个负值。
『叁』 java编程:从一个名为file的文件中逐行读取然后将读取的内容放进另一个文件file1中。
/**
* 以行为单位读取文件,常用于读面向行的格式化文件
*
* @param fileName
* 文件名
*/
public static void readFileByLines(String fileName) {
file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 文件写入
*
* @param filePath 路径名称
* @param sb 要写入的字符
*/
public void writeFromBuffer(String filePath, String sb)throws IOException {
File file = new File(filePath);
FileWriter fw;
try {
fw = new FileWriter(file);
if (sb.toString() != null && !"".equals(sb.toString())) {
fw.write(sb.toString());
}
fw.close();
} catch (IOException e) {
throw new IOException("文件写入异常!请检查路径名是否正确!");
}
}
自己组织一下,读取的数据可以放在stringbuffer里然后在传给写入方法
『肆』 在C语言中,举例说明如何打开一个文本文件,并读入文件中的数据
1.首先,使用VS构建一个新的空项目,然后直接单击ok。
『伍』 C语言编程:读取当前目录下的英文文章file.txt,按原格式显示在屏幕上,咋写
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000
int main ()
{
char str[N];
char a[111][30];
int k=0,j=0;
FILE *fp;
if((fp=fopen("D:\file.txt","r"))!=NULL)
printf("文件打开成功 ");
else
{
printf("文件打开失败 ");
exit(0);
}
while(fgets(str,N,fp)!=NULL)//利用fgets函数将文本中的非空字符全部储存在数组str中
for(int i=0;i<strlen(str);i++)
if(str[i]!=' '&&str[i]!='.')
a[k][j++]=str[i];//将每个单词储存在二维数组a的每一行
else
{
k++;//行下标
j=0;//列下标
}
printf("共%d个单词 ",k);
for(int i=0;i<=k;i++)
puts(a[i]);
fclose(fp);//关闭文件
return 0;
}
『陆』 用C语言编写读入并读取一个文件,按照下面的要求编写程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp,*ok;
char str1[80],str2[80];
if((fp=fopen("d:\file.txt","r+"))==NULL)//打开d盘下名为file的文本文件;
{
puts("file文件打开失败!");
exit(0);
}
else
puts("file文件打开成功");
if((ok=fopen("d:\file1.txt","r"))==NULL)//打开d盘下名为file1的文本文件;
{
puts("file1文件打开失败!");
exit(0);
}
else
puts("file1文件打开成功");
/*__________________*/
scanf("%[^!]",str1);//输入一串字符,以!为结束标志;
fprintf(fp,"%s",str1);//将字符串str1写入指针fp所指向的文件;
fscanf(ok,"%s",str2);//读取指针ok指向的文件,将内容以字符串的形式存储在数组str2中 ;
puts(str2);
/*__________________*/
fclose(fp);//关闭文件;
fclose(ok);
return 0;
}