IO——文件IO

一、文件IO与标准IO的区别:

标准IO :
  遵循ANSIC标准   有缓冲区(标准错误stderr没有)  高级IO   通过流进行操作   适用于普通文件(.c/.h/.sh等)


文件IO:
  遵循POSIX标准 无缓冲  低级IO  通过文件描述符进行操作 适用于特殊文件(设备文件)

文件描述符:是一个非负整数,用于对文件的标识;
                      系统默认打开的文件描述符: 0 (标准输入stdin)、1 (标准输出stdout) 、2 (标准错误stderr) 

二、 文件的打开:

open{
  函数原型:
      #include <sys/types.h>   (头文件)
       #include <sys/stat.h>
       #include <fcntl.h>
   int open(const char *pathname, int flags);
    功能:打开一个已经存在的文件;
    参数:
        pathname:文件名(可以包含路径)
        flags:文件的打开方式
                 O_RDONLY 只读
                 O_WRONLY 只写
                 O_RDWR      读写
      返回值:打开成功返回一个文件描述符,失败返回-1,并设置错误号;
  
   int open(const char *pathname, int flags, mode_t mode);
    功能:如果文件存在就打开这个文件,不存在就创建并打开这个文件;
    参数:
        pathname:文件名(可以包含路径)
        flags:文件的打开方式
                O_RDONLY 只读
                O_WRONLY 只写
                O_RDWR      读写
                O_CREAT  创建
                O_TRUNC  清空
                O_APPEND 以追加的方式打开文件
        mode:存取权限
            用八进制表示用户权限,同组用户权限,其他用户权限,eg:0777,0766
      返回值:打开成功返回一个文件描述符,失败返回-1,并设置错误号;

三、文件的关闭:

close
  文件描述符的个数是有限制的,文件使用完时应该对文件进行关闭操作;
   linux下文件描述符的个数为1024个(系统默认打开了0,1,2);
  #include <unistd.h>   (头文件)
  int close(int fd);
  参数:
      fd:文件描述符
     返回值:成功返回0, 失败返回-1并设置错误号;

四、文件的读写:

read
  函数原型:
  #include <unistd.h>   (头文件)

  ssize_t read(int fd, void *buf, size_t count);
    功能:向一个打开的文件读取内容;
    参数:
        fd: 文件描述符;
        buf: 用来存储读取数据的空间首地址
        count:预计要读取的字节数;
        返回值: 成功返回实际读到的字节数,读到文件末尾返回0, 失败返回-1并设置错误号;


write
  函数原型:
  #include <unistd.h>

  ssize_t write(int fd, const void *buf, size_t count);
    功能:向一个打开的文件写入内容;
    参数:
        fd: 文件描述符;
        buf: 用来存储待写入的数据的空间首地址
        count:预计要写入的字节数;
        返回值: 成功返回实际写入的字节数,失败返回-1,并设置错误号;

 五、目录流:

打开目录
   #include <sys/types.h>
   #include <dirent.h>
  DIR *opendir(const char *name);
    功能:打开一个目录;
     参数:目录名称
  返回值: 成功返回一个目录流指针,失败返回NULL;

读取目录
    #include <dirent.h>

    struct dirent *readdir(DIR *dirp);
  功能:读取目录里面的文件信息;
  参数:
      dirp:目录流
     返回值:成功返回下一个目录项, 失败或者读到目录的末尾返回NULL并设置错误号;
  
目录流的关闭
  #include <sys/types.h>
  #include <dirent.h>

  int closedir(DIR *dirp);
  返回值:成功返回0, 失败返回-1,并设置错误号;

六、修改文件权限:

int chmod(const char *pathname, mode_t mode);

参数:

   pathname:文件名(可包含路径)

  mode:修改后的权限
 int fchmod(int fd, mode_t mode);

    fd:文件描述符

    mode:修改后的权限

成功返回0, 失败返回-1并设置错误号;

七、格式输出:

printf();
fprintf():
    int fprintf(FILE *stream, const char *format, ...);

功能:向一个流格式输出

参数:

       stream:输出流

       format:地址表

       sprintf():
    int sprintf(char *str, const char *format, ...);
    功能:格式输出到一个str指向的空间中;


sscanf();
    int sscanf(const char *str, const char *format, ...);   
   功能:以某种格式从str指向的空间读取内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你介绍一下如何使用 Java 编写程序实现文件拷贝。 Java 提供了非常方便的 I/O 类来处理文件读写操作。文件拷贝的基本思路是读取源文件中的数据,然后将数据写入到目标文件中。下面是一个简单的文件拷贝程序示例: ```java import java.io.*; public class FileCopy { public static void main(String[] args) throws IOException { // 源文件路径 String srcFilePath = "C:/temp/source.txt"; // 目标文件路径 String destFilePath = "C:/temp/dest.txt"; // 创建输入流和输出流 FileInputStream fis = new FileInputStream(srcFilePath); FileOutputStream fos = new FileOutputStream(destFilePath); // 定义缓冲区,每次读取 1024 个字节 byte[] buffer = new byte[1024]; int len; // 循环读取源文件中的数据,并将数据写入到目标文件中 while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } // 关闭输入流和输出流 fis.close(); fos.close(); System.out.println("文件拷贝完成!"); } } ``` 在上面的示例中,我们首先定义了源文件路径和目标文件路径。然后创建了输入流和输出流,用于读取源文件和向目标文件写入数据。我们定义了一个缓冲区,每次从输入流中读取 1024 个字节,并将这些字节写入到输出流中。最后,我们关闭输入流和输出流,并输出一条完成信息。 需要注意的是,上面的代码中使用了 try-catch 语句来捕获可能出现的 IOException 异常。这是因为在文件读写过程中可能会出现异常,比如文件不存在、文件无法读取等等。为了保证程序的健壮性,我们需要使用 try-catch 语句来处理这些异常。 希望这个简单的示例可以帮助你了解如何使用 Java 编写文件拷贝程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值