精华内容
下载资源
问答
  • C语言详解 FILE文件操作

    万次阅读 多人点赞 2018-07-20 09:00:53
    进行C语言文件的存取时,都会先进行“打开文件操作,这个操作就是在打开数据流,而“关闭文件操作就是关闭数据流。 1.2 缓冲区(Buffer): 指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据...

    1. 需要了解的概念

    需要理解的知识点包括:数据流、缓冲区、文件类型、文件存取方式
     

    1.1 数据流:

    指程序与数据的交互是以流的形式进行的。进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。

    1.2 缓冲区(Buffer):

    指在程序执行时,所提供的额外内存,可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多。

     C语言中带缓冲区的文件处理:

    C语言的文件处理功能依据系统是否设置“缓冲区”分为两种:一种是设置缓冲区,另一种是不设置缓冲区。由于不设置缓冲区的文件处理方式,必须使用较低级的I/O函数(包含在头文件io.h和fcntl.h中)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是C的标准函数,跨平台操作时容易出问题。下面只介绍第一种处理方式,即设置缓冲区的文件处理方式:

    当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据,如下图所示:

    事实上,当写入文件时,并不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数据写入磁盘,如下图所示。


    1.3 文件类型:

    分为文本文件和二进制文件两种。

    文本文件是以字符编码的方式进行保存的。二进制文件将内存中数据原封不至文件中,适用于非字符为主的数据。如果以记事本打开,只会看到一堆乱码。

    其实,除了文本文件外,所有的数据都可以算是二进制文件。二进制文件的优点在于存取速度快,占用空间小,以及可随机存取数据。
     

    1.4 文件存取方式:

    包括顺序存取方式和随机存取方式两种。

    顺序读取也就是从上往下,一笔一笔读取文件的内容。保存数据时,将数据附加在文件的末尾。这种存取方式常用于文本文件,而被存取的文件则称为顺序文件。

    随机存取方式多半以二进制文件为主。它会以一个完整的单位来进行数据的读取和写入,通常以结构为单位。


    2. 文本文件操作

    C语言中主要通过标准I/O函数来对文本文件进行处理。相关的操作包括打开、读写、关闭与设置缓冲区。
    相关的存取函数有:fopen(), fclose(), fgetc(), fputc(), fgets(), fputs(), fprintf(), fscanf()等。
     

    2.1 打开文件

    函数原型为:_CRTIMP FILE * __cdecl fopen(const char *, const char *);

    第一参数为文件名,第二个参数为打开模式。

    打开成功,fopen返回一个结构指针地址,否则返回一个NULL。如果没有指定文件路径,则默认为当前工作目录。如:

    FILE *fp;
    fp = fopen("c:\\temp\\test.txt", "r") //由于反斜杠\是控制字符,所以必须再加一个反斜杠

     

    使用fopen()函数打开的文件会先将文件复制到缓冲区。注意:所下达的读取或写入动作,都是针对缓冲区进行存取而不是磁盘,只有当使用fclose()函数关闭文件时,缓冲区中的数据才会写入磁盘。
     

      谈文件打开模式

    打开文本文件:

    "r":只能从文件中读数据,该文件必须先存在,否则打开失败
    "w":只能向文件写数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件
    "a":向文件增加新数据(不删除原有数据),若文件不存在则打开失败,打开时位置指针移到文件末尾
    "r+":可读/写数据,该文件必须先存在,否则打开失败
    "w+":可读/写数据,用该模式打开新建一个文件,先向该文件写数据,然后可读取该文件中的数据
    "a+":可读/写数据,原来的文件不被删去,位置指针移到文件末尾

    打开二进制文件的模式与打开文本文件的含义是一样的,不同的是模式名称里面多一个字母'b’,以表示以二进制形式打开文件。
     

    2.2 关闭文件

    函数原型为:_CRTIMP int __cdecl fclose(FILE *);

    关闭成功返回值0,否则返回非零值。

    注:在执行完文件的操作后,要进行“关闭文件”操作。虽然程序在结束前会自动关闭所有的打开文件,但文件打开过多会导致系统运行缓慢,这时就要自行手动关闭不再使用的文件,来提高系统整体的执行效率。

     

    例1. 打开文件并进行判断和关闭文件

     

    FILE *fp;
    fp = fopen("c:\\temp\\test.txt", "r");

    if(fp == NULL)
        printf("fail to open the file! \n");
    else
    {
        printf("The file is open! \n");
        fclose(fp);
    }

     

     

    2.3 字符存取函数

    函数原型为:

    _CRTIMP int __cdecl fputc(int, FILE *);
    _CRTIMP int __cdecl fgetc(FILE *);

    字符读取函数fgetc()可从文件数据流中一次读取一个字符,然后读取光标移动到下一个字符,并逐步将文件的内容读出。

    如果字符读取成功,则返回所读取的字符,否则返回EOF(end of file)。EOF是表示数据结尾的常量,真值为-1。另外,要判断文件是否读取完毕,可利用feof()进行检查。未完返回0,已完返回非零值。

    feof()函数原型为:_CRTIMP int __cdecl feof(FILE *);

    例2. fgetc()函数的使用

    版本1:利用feof()函数检查文件是否读取完毕

     

    #include <stdio.h>

    main()
    {
        FILE *fp;
        fp = fopen("c:\\temp\\test.txt", "r");
        if(fp != NULL)
        {
            while(!feof(fp))
                printf("%c", fgetc(fp));
        }
        else
            printf("fail to open! \n");
        fclose(fp);

        return 0;
    }

     


    版本2:利用文件结束标志EOF(即-1)

     

    #include <stdio.h>

    main()
    {
        char ch;
        FILE *fp;
        fp = fopen("c:\\temp\\test.txt", "r");
        if(fp != NULL)
        {
            ch = fgetc(fp);
            while(ch != EOF)
            {
                putchar(ch);
                ch = fgetc(fp);
            }

        }
        else
            printf("fail to open! \n");
        fclose(fp);

        return 0;
    }

     


    版本3 - 重构版本2

     

    #include <stdio.h>

    main()
    {
        char ch;
        FILE *fp;
        if((fp = fopen("test.txt", "r")) != NULL)
            while((ch = fgetc(fp)) != EOF)
                putchar(ch);
        else
            printf("fail to open! \n");
        fclose(fp);

        return 0;
    }

     


    版本4 - 重构版本3 (不正确的重构)

     

    #include <stdio.h>

    main()
    {
        FILE *fp;
        if((fp = fopen("test.txt", "r")) != NULL)
            while(fgetc(fp) != EOF)
                putchar(fgetc(fp));
        else
            printf("fail to open! \n");
        fclose(fp);

        return 0;
    }

     



    若要将字符逐一写入文件,用fputc()函数。示例为:

    例3. fputc()函数的使用

     

    #include <stdio.h>
    #include <conio.h>

    main()
    {
        char filename[20], ch;
        FILE *fp;
        printf("Enter a filename: ");
        scanf("%s", filename);
        printf("Enter some characters to output to file: ");
        if((fp = fopen(filename, "w")) == NULL)
            printf("fail to open! \n");
        else
        {
            while((ch = getche()) != '\015')
                fputc(ch, fp);
        }
        fclose(fp);

        return 0;
    }

     


     

    2.4 字符串存取函数

    函数原型为:

    _CRTIMP int __cdecl fputs(const char *, FILE *);
    _CRTIMP char * __cdecl fgets(char *, int, FILE *);

    fgets函数的作用是从指定文件读入一个字符串,如:fgets(str, n, fp);

    参数n为要求得到的字符个数,但只从fp指向的文件输入n-1个字符,然后在最后加一个'\0'字符,因此得到的字符串共有n个字符,把它们放在字符数组str中。如果在读完n-1个字符之前遇到换行符或EOF,读入结束。

    fputs函数的作用是向指定文件输出一个字符串,如:fputs("Hey", fp);

    把字符串"Hey"输出到fp指向的文件。fputs函数的第一个参数可以是字符串常量、字符数组名或字符型指针。若输出成功,则返回0,否则返回EOF。

    实例略

     

    2.5 格式化存取函数

    函数原型为:

    _CRTIMP int __cdecl fprintf(FILE *, const char *, ...);
    _CRTIMP int __cdecl fscanf(FILE *, const char *, ...);

    它们与printf和scanf函数相仿,都是格式化读写函数。不同的是:fprintf和fscanf函数的读写对象不是终端(标准输入输出),而是磁盘文件。printf函数是将内容输出到终端(屏幕),因此,fprintf就是将内容输出到磁盘文件了。

    实例4. fprintf和fscanf函数的使用

     

    #include <stdio.h>

    void main()
    {
        FILE *fp;

        int num = 10;
        char name[10] = "Leeming";
        char gender = 'M';

        if((fp = fopen("info.txt", "w+")) == NULL)
            printf("can't open the file! \n");
        else
            fprintf(fp, "%d, %s, %c", num, name, gender); //将数据格式化输出到文件info.txt中

        fscanf(fp, "%d, %s, %c", &num, name, &gender); //从文件info.txt中格式化读取数据
        printf("%d, %s, %c \n", num, name, gender); //格式化输出到屏幕

        fclose(fp);
    }

     


     

    2.6 指针重返函数

    函数原型为:

    _CRTIMP void __cdecl rewind(FILE *);;

    rewind函数的作用是使位置指针重返回文件的开头,属于文件的定位。

     

    3. 二进制文件操作

    3.1 数据块存取函数

    函数原型:

    _CRTIMP size_t __cdecl fread(void *, size_t, size_t, FILE *);
    _CRTIMP size_t __cdecl fwrite(const void *, size_t, size_t, FILE *);

    当要求一次存取一组数据(如,一个数组、一个结构体变量的值),fread和fwrite函数可以解决该类问题。它们的调用形式一般为:

    fread(buffer, size, count, fp);
    fwrite(buffer, size, count, fp);

    buffer:对于fread来说,指的是读入数据的存放地址;对于fwrite来说,是要输出数据的地址。
    size:读写数据时,每笔数据的大小
    count:读写数据的笔数
    fp:文件指针
     

    实例5. fread和fwrite函数的使用

     

    #include <stdio.h>
    #define SIZE 3

    typedef enum { MM, GG } Gender;

    typedef struct
    {
        char name[10];
        int  age;
        Gender gender;
    } Person;

    void write2file(Person emp[SIZE])
    {
        FILE *fp;
        if((fp = fopen("emp.txt", "wb")) == NULL)
        {
            printf("cannot open file! \n");
            return;
        }

        for(int i=0; i<SIZE; i++)
            if(fwrite(&emp[i], sizeof(Person), 1, fp) != 1)
                printf("file write error! \n");
        fclose(fp);
    }

    void read_from_file(FILE *fp)
    {
        Person emp_out[SIZE];

        if((fp = fopen("emp.txt", "rb")) == NULL)
        {
            printf("cannot open file! \n");
            return;
        }

        printf("\n%d employee's information read: \n", SIZE);

        for(int i=0; i<SIZE; i++)
        {
            if(fread(&emp_out[i], sizeof(Person), 1, fp) != 1)
                if(feof(fp))
                {
                    fclose(fp);
                    return;
                }
                printf("%-5s %4d %5d \n", emp_out[i].name, emp_out[i].age, emp_out[i].gender);
        }
        fclose(fp);
    }

    void main()
    {
        FILE *fp = NULL;
        Person employee[SIZE];

        printf("Enter %d employee's information: \n", SIZE);
        for(int i=0; i<SIZE; i++)
            scanf("%s %d %d", employee[i].name, &employee[i].age, &employee[i].gender);

        write2file(employee);

        read_from_file(fp);
    }

     


     

    3.2 随机存取函数fseek()

    函数原型:

    _CRTIMP int __cdecl fseek(FILE *, long, int);

    对流式文件可以进行顺序读写,也可以进行随机读写。关键在于控制文件的位置指针,如果位置指针是按字节位置顺序移动的,就是顺序读写。如果能将位置指针按需要移动到任意位置,就可以实现随机读写。所谓随机读写,是指读完上一个字符(字节)后,并不一定要读写其后续的字符(字节),而可以读写文件中任意位置上所需要的字符(字节)。该函数的调用形式为:

    fseek(fp, offset, start);

    start:起始点。用0、1、2代替。0代表文件开始,名字为SEEK_SET,1代表当前位置,名字为SEEK_CUR,2代表文件末尾,名字为SEEK_END。

    fseek()函数一般用于二进制文件,因为文本文件要发生字符转换,计算位置时往往会发生混乱。

    调用实例如:

    fseek(fp, i*sizeof(Person), 0);

     

    https://blog.csdn.net/yong_sun/article/details/8921061

    展开全文
  • Python进阶(十五)-file文件操作

    万次阅读 2017-03-19 09:25:13
    Python进阶(十五)-file文件操作  Python下文件操作与Java差不多。打开文件的模式有三种: r,只读模式(默认)。 w,只写模式。【不可读;不存在则创建;存在则删除内容;因为会清空原有文件的内容,一定要慎用】 ...

    #Python进阶(十五)-file文件操作
      Python下文件操作与Java差不多。打开文件的模式有三种:

    • r,只读模式(默认)。
    • w,只写模式。【不可读;不存在则创建;存在则删除内容;因为会清空原有文件的内容,一定要慎用】
    • a,追加模式。【可读; 不存在则创建;存在则只追加内容;】

      注意最后要记得关闭文件:f.close()
      python只能将字符串写入到文本文件。要将数值数据存储到文本本件中,必须先试用函数str()将其转换为字符串格式。

    #r模式(只读模式)
    f = open('yesterday',encoding='utf-8')
    data = f.read()
    f.close()
    print(data)
    #只读文件的前5行:
    f = open('yesterday','r',encoding='utf-8')
    for i in range(5):
        print(f.readline())
    #以列表的方式读取这个文件
    f = open('yesterday','r',encoding='utf-8')
    for line in f.readlines():
        print(line)
    #对文件的第3行,做一个特殊的打印(这种方式比较低效,因为它会先把文件全部读取到内存中,文件较大时会很影响性能)
    f = open('yesterday','r',encoding='utf-8')
    for index,line in enumerate(f.readlines()):
        if index == 2:
            print('-----测试线----',line)
            continue
        print(line)
    #比较高效的,逐行读取文件内容,因为它是一行一行的去读取文件,不会先把文件一次性全部读取到内存中
    f = open('yesterday','r',encoding='utf-8')
    for line in f:
        print(line)
    #比较高效的,对文件的3三行进行过特殊打印
    f = open('yesterday','r',encoding='utf-8')
    count = 0
    for line in f:
        if count == 2:
            print('------测试线----:',line)
        count += 1
        print(line)
    
    #w模式(如果没有就创建文件,如果有就清空文件,一定要慎用)
    f = open('yesterday','w',encoding='utf-8')
    f.write("这就是一行测试\n")
    f.write("测试2\n")
    f.write("测试3")
    
    #a模式(追加模式,如果没有就创建文件,如果有就把内容追加进去)
    f = open('yesterday','a',encoding='utf-8')
    f.write("test1\n")
    
    #文件光标的操作
    f = open('yesterday','r',encoding='utf-8')
    #获得文件的光标
    print(f.tell())
    print(f.readline())
    print(f.tell())
    #回到最开始的位置(也可以指定一个位置,前提是你得知道你去往的字符具体在哪个位置才行)
    f.seek(0)
    
    #显示文件的编码
    print(f.encoding)
    #显示文件句柄的编号(我并不确定这个说法是否正确,用到时请仔细去查一下)
    print(f.fileno())
    #测试是否是一个终端设备文件
    print(f.isatty())
    #把缓存的内容刷新到硬盘(进度条那个脚本里有写一个示例)
    f.flush()
    #指定文件从哪里开始截断,如果没有参数,默认从0开始等于清空了这个文件
    #f.truncate()
    
    #r+ 模式(读,追加模式)
    f = open('yesterday','r+',encoding='utf-8')
    data = f.read()
    print(data)
    f.write("test...\n")
    
    #还有 w+写读模式, a+追加读模式,这一般不用,真用到了再去了解下吧
    #rb 模式,以二进制的方式读取这个文件
    #wb 模式,二进制写
    '''
    
    '''
    #with语句(很实用,记得要经常用哟~,在《Python编程从入门到实战》那本书里的文件与异常那一章有详细用法)
    #为了避免打开文件后忘记关闭,可以通过管理上下文,即:
    with open('log','r') as f:
    
        ...
    #如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
    #在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
    with open('log1') as obj1, open('log2') as obj2:
        pass
    

    ##参考资料
      http://www.yiibai.com/python3/file_methods.html

    ![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/f9c024e20306fb0e4e3e84a15aab3217.png)
    展开全文
  • Java File文件操作

    万次阅读 多人点赞 2016-05-21 20:35:57
    Java提供File类,让我们对文件进行操作,简单整理了一下File类的用法。 1.基本概念File文件和目录路径名的抽象表示形式,代表文件或者文件夹。 2.构造方法 // 根据parent抽象路径名和child路径名字符串创建一个新...

    Java提供File类,让我们对文件进行操作,简单整理了一下File类的用法。

    这里写图片描述

    1.基本概念

    File:文件和目录路径名的抽象表示形式,代表文件或者文件夹。

    2.构造方法

    	    // 根据parent抽象路径名和child路径名字符串创建一个新File实例
    		File(File parent, String child)
    		// 通过将给定路径名字符串转换为抽象路径名来创建一个新File实例
    		File(String pathname)
    		// 根据parent路径名字符串和child路径名字符串创建一个新File实例
    		File(String parent, String child)
    		// 通过将给定的file:URI转换为一个抽象路径名来创建一个新的File实例
    		File(URI uri)
    

    3.常用方法

    (1).创建功能

    // 创建此抽象路径名指定的目录
    boolean mkdir()
    // 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录
    boolean mkdirs()
    // 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
    boolean createNewFile()
    // 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称
    static File createTempFile(String prefix, String suffix)
    // 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称
    static File createTempFile(String prefix, String suffix, File directory)

            // 构造方法一
    		File file1 = new File("f://file1");
    		// 构造方法二
    		File file2 = new File("f://file1", "file2");
    		// 构造方法三
    		File file3 = new File(file2, "file3.txt");
    
    		// 创建目录并返回是否创建成功,如果目录存在则返回false
    		boolean b1 = file1.mkdir();
    		System.out.println(b1);// true
    		// 创建目录
    		boolean b2 = file2.mkdir();
    		System.out.println(b2);// true
    		// 创建文件
    		// 在F盘下创建/file1/file2/file3.txt文件
    		boolean b3 = file3.createNewFile();
    		System.out.println(b3);// true
    
    		// 创建空文件并指定前缀和后缀
    		// 在F盘下创建/file1/file2/file4.....exe文件
    		File.createTempFile("file4", ".exe", file2);
    

    这里写图片描述

    注:三种构造方法效果是等同的,没有本质区别;创建目录mkdir()、mkdirs()方法,mkdirs()方法创建目录时,如果待创建目录的上几级目录不存在则一并创建,mkdir()则只能创建单级目录。

    (2).删除功能

    // 删除此抽象路径名表示的文件或目录
    boolean delete()

           //删除目录
    	   System.out.println(file1.delete()); // false
    	   //删除文件
    	   System.out.println(file3.delete());// true
    

    注:删除操作时,删除的是目录,则必须保证是空目录。

    (3).判断功能

    // 测试此抽象路径名表示的文件或目录是否存在
    boolean exists()
    // 测试此抽象路径名表示的文件是否是一个目录
    boolean isDirectory()
    // 测试此抽象路径名表示的文件是否是一个标准文件
    boolean isFile()
    // 测试此抽象路径名指定的文件是否是一个隐藏文件
    boolean isHidden()
    // 测试应用程序是否可以读取此抽象路径名表示的文件
    boolean canRead()
    // 测试应用程序是否可以修改此抽象路径名表示的文件
    boolean canWrite()

    	    File file = new File("F://hello");
    		File file2 = new File(file, "blog.txt");
    		// 判断是否存在
    		if (!file.exists()) {
    			// 创建目录
    			file.mkdir();
    		}
    		if (file2.exists()) {
    			// 创建文件
    			file2.createNewFile();
    		}
    
    		// 判断是否是目录
    		System.out.println(file.isDirectory());// true
    		// 判断是否是文件
    		System.out.println(file.isFile());// false
    
    		System.out.println(file2.isDirectory());// false
    		System.out.println(file2.isFile());// true
    		System.out.println(file2.isHidden());// false
    		// 判断是否是隐藏的
    		System.out.println(file2.isHidden());// false
    		// 判断是否可读
    		System.out.println(file2.canRead());// true
    		// 判断是否可写
    		System.out.println(file2.canWrite());// true
    

    注:可以自主修改文件可读性,查看不同输出。

    (4).获取功能

    (1).基本获取功能

    // 返回由此抽象路径名表示的文件或目录的名称
    String getName()
    // 返回此抽象路径名的绝对路径名形式
    File getAbsoluteFile()
    // 返回此抽象路径名的绝对路径名字符串
    String getAbsolutePath()
    // 将此抽象路径名转换为一个路径名字符串
    String getPath()
    // 返回此抽象路径名表示的文件最后一次被修改的时间
    long lastModified()

    	  	File file = new File("F://hello");
    		File file2 = new File(file, "blog.txt");
    		// 判断文件或目录是否存在
    		if (!file.exists()) {
    			// 不存在则创建
    			file.mkdir();
    		}
    		if (file2.exists()) {
    			// 创建文件
    			file2.createNewFile();
    		}
    		//获取文件名或者目录名
    		System.out.println(file2.getName());// blog.txt
    		//获取文件或目录的绝对路径
    		System.out.println(file2.getAbsolutePath());// F:\hello\blog.txt
    		//获取文件或目录的路径名(绝对路径或者相对路径)
    		System.out.println(file2.getPath());// F:\hello\blog.txt
    	    //获取文件或目录修改的最后时间返回毫秒值
    		System.out.println(file2.lastModified());// 1463734158963
    
    (2).迭代获取功能,过滤器功能

    // 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
    String[] list()
    // 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录
    String[] list(FilenameFilter filter)
    // 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
    File[] listFiles()
    // 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
    File[] listFiles(FileFilter filter)
    // 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
    File[] listFiles(FilenameFilter filter)

    图示:先看下F盘里面的东东
    这里写图片描述

    	    File file = new File("F://");
    
    		// 获取抽象路径名下的文件和目录
    		String[] s = file.list();
    		// 过滤文件或者目录名
    		String[] ss = file.list(new FilenameFilter() {
    
    			public boolean accept(File dir, String name) {
    				// 返回以.png结尾的文件或者目录名
    				// 控制返回值判断是否添加到数组中
    				return name.endsWith(".png");
    			}
    		});
    
    		// 增强for输出
    		for (String string : s) {
    			System.out.print(string + " ");// $RECYCLE.BIN android4.0黑马  android视频......等等
    		}
    
    		// 增强for
    		for (String string : ss) {
    			System.out.print(string + " ");// ic_ptr_loading.png ic_ptr_pull.png ic_ptr_release.png
    		}
    
    		// 获取抽象路径名下的文件和目录对象
    		File[] files = file.listFiles();
    		// 获取抽象路径名下的文件和目录对象,添加文件过滤
    		File[] files2 = file.listFiles(new FileFilter() {
    
    			public boolean accept(File pathname) {
    				// 判断是否是隐藏目录
    				return (pathname.isDirectory()&&pathname.isHidden());
    			}
    		});
    
    		// 获取抽象路径名下的文件和目录对象,添加文件名过滤
    		File[] files3 = file.listFiles(new FilenameFilter() {
    
    			public boolean accept(File dir, String name) {
    				// 判断是否是以png结尾的文件
    				return (new File(dir, name).isFile())&&name.endsWith(".png");
    			}
    		});
    
    		for (File f : files) {
    			System.out.print(f.getName()+" ");//$RECYCLE.BIN android4.0黑马 android视频......等等
    	    System.out.println();
    		for (File f : files2) {
    			System.out.print(f.getName()+" ");//$RECYCLE.BIN ghos 
    		}
    		 System.out.println();
    		for (File f : files3) {
    			System.out.print(f.getName());//ic_ptr_loading.pngic_ptr_pull.pngic_ptr_release.png
    		}
    

    (5).重命名功能

    // 重新命名此抽象路径名表示的文件
    boolean renameTo(File dest)

            // 重新命名此抽象路径名表示的文件
    		// boolean renameTo(File dest)
    
    		File file = new File("f://");
    		File[] files = file.listFiles();
    
    		for (int i = 0; i < files.length; i++) {
    			File f = files[i];
    			//判断是否是以.png结尾的文件
    			if (f.isFile() && f.getName().endsWith(".png")) {
    				// 更改文件名,renameTo()接收File对象 ,这里该对象并未指定盘符
    				boolean b = f.renameTo(new File("pic" + i + ".png"));
    				System.out.println(b);
    				// true
    				// true
    				// true
    			}
    		}
    

    图示:
    这里写图片描述
    这里写图片描述

    注:更改文件或目录名时,renameTo()方法参数对象如果不指定盘的话,默认会将文件剪切到项目目录下(由上面截图可以看到);指定盘符的话会根据指定位置剪切到该位置。renameTo()方法相当于剪切加重命名。

    注:更多方法查看API

    展开全文
  • c++ FILE文件操作(转载)

    万次阅读 2018-11-28 21:46:22
    语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制...顺序操作文件与随机操作文件 顺序文件:读/写第K个数据块之前必须读/写第1至K-1个数据块; 随机文件:可直接读/写第K个数据块; 正文...

    转自:https://blog.csdn.net/jiahehao/article/details/1862867?utm_source=blogxgwz7

    语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制文件)

    缓冲与非缓冲文件
    顺序操作文件与随机操作文件
    顺序文件:读/写第K个数据块之前必须读/写第1至K-1个数据块;
    随机文件:可直接读/写第K个数据块;
    正文文件的操作一般是顺序文件;
    二进制文件的操作都是随机文件。


    一、文件操作的一般过程
    定义文件指针 FILE *
    打开文件 fopen
    对文件进行读写  
        <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

    二、系统已定义的与文件操作有关的数据结构全都在stdio.h中

    FILE 结构体

    FILE *fr,*fp,*fw;

    FILE* 指针作为文件句柄,是文件访问的唯一标识,它由fopen函数创建,fopen打开文件成功,则返回一个有效的FILE*指针,否则返回空指针NULL


    标准文件指针

    FILE *stdin,*stdout,*stderr,
    stdin 指键盘输入
    stdout 指显示器
    stderr 指出错输出设备,也指显示器

    这些变量已成功初始化,可直接使用.
    三、常用操作函数

    fopen

    格式:FILE *fopen(文件名字符串,打开方式串)

    例:FILE *fr; fr=fopen("c://user//abc.txt","r");

    字符串操作:

    1)"r"或"rt":正文文件只读方式打开。文件不存在,则打开失败(顺序读)"w"或"wt":正文文件只写方式打开。若文件不存在,则建立文件;若文件存在,则删除文件内容,重建空文件(顺序写);(截取文件长度为0)

    2) "a"或"at":正文文件添加方式。文件不存在,则建立文件(顺序添加写)

    3) "r+"或"rt++":正文文件读写打开,文件不存在,则打开失败(顺序读/写、随机读/写,含改写与添加);

    4) "w+"或"w++":正文文件读写方式打开,文件不存在,则建立文件;否则截取文件长度为0(顺序读/写,随机读/写,对写入的内容可以读或改写或添加)

    5) ~b:正文文件→二进制文件
    顺序读→顺序/随机读(“rb”)

    eg:"r"或"rt"→"rb"
    顺序写("wb")
    顺序添加写("ab")
    顺...,随...,含...("rb+")
    顺...,添加("wb+")
    顺...,添加("ab+")

    使用fopen时,但凡含r字母的打开方式,一定要加判断,文件是否打开成功,否则程序不会报告错误,会运行下去。

    如:FILE *fr;
    fr=fopen("abc.txt","r");
    if(fr==NULL){
    printf("File not open!/n");
    return; /*或exit(1);*/


    文件关闭

    fclose(FILE *fp)

    一般地,fclose(fp)与fopen应配对使用,特别是含有写方式的文件,若不关闭会造成文件数据丢失。

    fcloseall(void):关闭当前所有打开的文件。


    单字节的输入函数

    可适用于二进制与正文文件操作
    int fgetc(FILE *fp)
    int fputc(char ch.FILE *fp)

    fgetc的返回值都是正数(0~255)

    文件无可读字节则返回-1(EOF)

    正文文件与二进制文件读写的区别:
    正文文件读到13 10时,将自动跳过13,读出10并返回;正文文件写入10时,首先自动写入13再写入10.


    文件指针与文件指针操作函数

    文件指针是文件操作系统数据结构内部的一种数据指针,它用于标注文件当前读写位置,C语言中,文件指针以字节为单位,文件第一个字节位置号为0,若文件长度为N个字节,则最后一个字节的位置号为N-1,长度为N字节的文件有效读写范围为0~N-1。指针位置在此之外进行读/写操作,则失败;读写函数返回-1(EOF);

    C语言的文件指针采用long型值;

    执行文件读/写操作后,文件指针自动向后移动,指到新的待读/写位置。

    文件指针移动函数
    rewind(FILE *fp)
    文件指针重置为0
    fseek(FILE *fp,long off,int pos)
    从pos位置开始,移动off个字节。

    pos: 0 文件开始
    1 文件当前指针位置
    2 文件结尾(文件长度为N,则指针位置为N)

    例:fseek(fp,0l,0);←→rewind(fp)
    fseek(fp,-1L,2); /*移动指针到最后一个字节*/
    fseek(fp,-2L,1); /*移动指针到当前位置的前两个位置*/
    long ftell(FILE *fp)

    求当前指针位置

    例:求文件长度
    fseek(fp,OL,2);
    len=ftell(fp);
    则len为文件长度

    文件指针的特性:

    可在“负无穷”到“正无穷”任意移动;
    在0~N-1之外进行读操作,则读失败;读失败后,feof函数为真;
    从N位置开始写入,则为添加;
    从0~N位置之外开始写也可,其行为不必掌握,因为几乎无用;
    无论任何方式,刚打开文件时,ftell函数返回值都是0,含a方式的文件,只要一写(第一次写),文件指针自动移动到N位置处。
    int feof(FILE *fp)
    若文件读失败,则返回非0值,否则返回0值;仅用于读是否到文件尾。
    任何fseek操作使feof为假,即使文件指针在0~N-1之外。
    正文文件读/写函数
    fscanf(fp...)
    fprintf(fp...)

    其中,...与scanf和printf用法完全相同.
    scanf(...)←→fscanf(stdin...)
    printf(...)←→fprintf(stdout...)


    二进制文件读/写函数,即字节块函数
    int fread(char *buf,int size,int count,FILE *fp)
    int fwrite(char *buf,int&nbtp;size,int count,FILE *fp)
    从文件读出size x count个字节到内存块buf;从内存块buf写入size x count个字节到文件,返回实际读出/写入的字节数。

     

     

    一、文件中删除第K个记录:拷贝0~K-1,K+1~N条记录到一个临时文件,删除源文件,将源文件改名为源文件。

    二、读/改写第K个记录:移动指针到第K个记录,用fread,fwrite改写。

    三、添加记录(略)

    四、插入记录

    复制临时文件
    插入到K号记录之前:先将N-1写入N位置,N-2写入N-1,直到K写入K+1位置:用待插入记录改写K位置。(建立时用rb+方式打开)
    #include "tdio.h"
    void main()
    {FILE *fp;char ch1,ch2;long pos1,pos2,p;
    char fname[81];
    printf("Input C source filename:");
    gets(fname);
    fp=fopen(fname,"r+");
    if(!fp){printf("FILE not found ./n); return;
    ch1=fgetc(fp);
    while(!feof(fp))
    {cha2=fgetc(fp);if(feof(fp)) break;
    if(ch1=='/'&&ch2=='*')
    {pos1=ftell(fp)-2;
    }
    if(ch1=='*'&&ch=='/')
    {pos2=ftell(fp)-1;
    fseek(fp,pos1,0);
    for(p=pos1;p<=pos2;p++) fputc(32,fp);
    fseek(fp,OL,1);
    }
    ch1=ch2;
    }
    fclose(fp);  
    ---------------------
    作者:jiahehao
    来源:CSDN
    原文:https://blog.csdn.net/jiahehao/article/details/1862867
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • oracle UTL_FILE文件操作

    千次阅读 2017-09-13 23:30:39
    UTL_FILE是oracle提供的一个标准的工具包,用来读写文件使用。本文通过实例详细讲解该包的用法,实例具体步骤如下: 1.创建路径 要操作文件,就需要有对应的路径,而oracle中使用路径需要用到它的一个结构:...
  • C#file文件操作

    万次阅读 2013-11-25 18:55:13
    FileStream Fs = new FileStream("name.txt", FileMode.Open);//文件对象 StreamReader sr = new StreamReader(fs, Encoding.Default);//读取 StreamWriter Sw = new StreamWriter(Fs, Encoding.Default);//写入 ...
  • cordova-plugin-file 文件操作整理(一)

    万次阅读 2017-02-25 16:17:11
    一、cordova file文件系统操作插件 这个插件实现了一个文件API,允许对设备上的文件进行读/写访问。文件的插件允许你做一个临时的为你的应用程序的存储位置或持续像存储文件的东西(沙箱存储)和存储文件的其他依赖...
  • cordova-plugin-file 文件操作整理(二)

    万次阅读 2017-02-25 17:28:07
    Cordove File实例Demo 一、cordova.file获取系统目录 //当前程序的目录 console.info(cordova.file.applicationDirectory); //程序的数据目录 console.info(cordova.file.applicationStorageDirectory); //程序的...
  • cordova-plugin-file 文件操作整理(三)

    千次阅读 2017-02-25 17:46:02
    Cordove File实例Demo(二) 1.读取系统目录内容: //获取当前程序存储目录 $scope.show3 = function () { $scope.folder = cordova.file.applicationStorageDirectory; console.info(cordova.file....
  • 安卓Android的file文件操作

    千次阅读 2011-11-06 14:25:37
    android的文件操作要有权限:  判断SD卡是否插入  Environment.getExternalStorageState().equals(  android.os.Environment.MEDIA_MOUNTED);  获得sd卡根目录  File skRoot = Environment...
  • 1. 文件操作——File 1.1. File表示目录信息 1.1.1. listFiles方法 File的listFiles方法用于返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。其方法定义: copytextpop-up ...
  • C++的File文件操作

    千次阅读 2008-07-01 19:07:00
    C++的File文件操作 语言文件系统称为流文件(Stream),正文流(正文文件),二进制流(二进制文件) 缓冲与非缓冲文件 顺序操作文件与随机操作文件 顺序文件:读/写第K个数据块之前必须读/写第1至K-1个数据块;...
  • Javascript 文件操作 Javascript File 对象

    千次阅读 2019-08-07 20:22:52
    Javascript 文件操作 Javascript File 对象 一、功能实现核心:FileSystemObject 对象 要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象。 二、FileSystemObject编程 使用...
  • File文件的一些基本方法和操作

    万次阅读 2017-08-15 20:09:21
    1.File对象对应你磁盘上的一个文件或者文件夹(路径),一个file对象代表了一个文件或者文件夹的引用,并不是直接物理上的。2.File.separator: 连接符 public static final String separator与系统相关的默认名称 - ...
  • Java文件file操作总结

    万次阅读 2010-08-31 15:55:00
    Java文件操作我个人认为重要的问题有: a:如何跨平台问题 b:文件编码问题,尤其是多语言平台情况下如何正常工作。 c:文件读写效率、操作效率 d:文件加密和文件安全 e:文件快速检索,强烈建议使用lence进行文件...
  • Python File文件方法操作open()

    万次阅读 2019-06-19 09:57:02
    Python文件操作 前言:在使用Python对文件进行操作时,需要先了解绝对路径和相对路径。 绝对路径:指的是从磁盘根目录到文件名,或者网上的一个完整的网络地址。例:“D:\Program Files\Tencent\QQ\Bin\QQScLauncher...
  • C++ File类(文件目录操作

    万次阅读 2019-03-14 17:20:12
    C++的file操作很麻烦,刚开始用windowAPI写,后来才发现io.h库里提供了文件目录的操作,所以下面只是根据这些操作,封装出一个file类,可能有漏洞(小白),有问题的话可以联系我做一些修改 注意:C++17中提供了...
  • Java IO操作——文件操作File的使用

    千次阅读 2016-07-14 15:46:20
    可以使用File类中的方法对文件进行操作。 在整个Java的学习中,个人感觉学习较为困难的地方就是IO,因为整个IO是非常庞大的,而且有很多操作的类。每个类都有各自的特点。如果面向对象各个概念都非常清楚的话,则...
  • java 操作文件File

    千次阅读 2016-05-28 23:14:59
    方便对文件与文件夹的属性信息进行操作File对象可以作为参数传递给流的构造函数。 File 类的常用的方法。import java.io.*; /*File类的常见方法 1.创建。 boolean createNewFile(); boolean mkdir();创建...
  • file和file文件

    千次阅读 2016-07-20 12:13:29
    **io流是程序中比较常用的功能,基本上涉及到文件上传下载的都要用到这功能,比如上传头像,上传附件等等。 对于一个java程序员来说,io流也是必须掌握的,因此这里对比较常用的或者说曾经用过的方法进行简单的归纳...
  • C#文件操作FileMode

    万次阅读 2015-10-05 15:17:12
    FileMode 枚举 .NET Framework 4.6 and 4.5 ...指定操作系统打开文件的方式。 命名空间: System.IO 程序集: mscorlib(在 mscorlib.dll 中)  System.IO.FileSystem.Primitives(在 System.IO.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,914,905
精华内容 765,962
关键字:

file文件操作