📜  Java Java

📅  最后修改于: 2022-05-13 01:54:43.235000             🧑  作者: Mango

Java Java

Java 中的 io.FileDescriptor

Java.io.FileDescriptor用于打开具有特定名称的文件。如果该文件中存在任何内容,它将首先删除所有内容并将“进程开始”作为第一行。文件描述符类的实例用作表示打开的文件、打开的套接字或其他字节源或接收器的底层机器特定结构的不透明句柄。

  • 文件描述符的主要实际用途是创建一个 FileInputStream 或 FileOutputStream 来包含它。
  • 应用程序不应创建自己的文件描述符。

字段

  • err:标准错误流的句柄。
  • in:标准输入流的句柄。
  • out:标准输出流的句柄。

宣言 :

public final class FileDescriptor
   extends Object

构造函数:

  • FileDescriptor() :构造一个 FileDescriptor 对象

方法:

  • sync() : Java.io.File.sync()将所有缓冲区与底层设备同步。当 FileDescriptor 的所有修改数据都已写入底层设备时,该方法返回。
    句法 :
public void sync()
Parameters :
-----------
Return : 
void
Exception : 
-> SyncFailedException : This is exception is thrown if there is no guarantee of    
                         synchronization of buffers with the device. 
Java
// Java program explaining the working of sync() method
 
import java.io.*;
 
public class NewClass
{
    public static void main(String[] args) throws IOException
    {
        // Initializing a FileDescriptor
        FileDescriptor geek_descriptor = null;
        FileOutputStream geek_out = null;
 
        // HERE I'm writing "GEEKS" in my file
        byte[] buffer = {71,69,69,75,83};
 
        try{
            geek_out = new FileOutputStream("FILE.txt");
 
            // This getFD() method is called before closing the output stream
            geek_descriptor = geek_out.getFD();
 
            // writes byte to file output stream
            geek_out.write(buffer);
 
            // USe of sync() : to sync data to the source file
            geek_descriptor.sync();
            System.out.print("\nUse of Sync Successful ");
 
        }
        catch(Exception except)
        {
            // if in case IO error occurs
            except.printStackTrace();
        }
        finally
        {
            // releases system resources
            if(geek_out!=null)
                geek_out.close();
        }
    }
}


Java
// Java program explaining the working of valid() method
 
import java.io.*;
 
public class NewClass
{
    public static void main(String[] args) throws IOException
    {
        // Initializing a FileDescriptor
        FileDescriptor geek_descriptor = null;
        FileInputStream geek_in = null;
 
        try
        {
            geek_in = new FileInputStream("FILE.txt");
 
            // get file descriptor
            geek_descriptor = geek_in.getFD();
 
            boolean check = false;
 
            // Use of valid() : checking the validity of FileDescriptor
            check = geek_descriptor.valid();
 
            System.out.print("FileDescriptor is valid : "+check);
 
        }
        catch(Exception except)
        {
            // if in case IO error occurs
            except.printStackTrace();
        }
        finally
        {
            // releases system resources
            if(geek_in!=null)
                geek_in.close();
        }
    }
}


笔记 :
您看不到此代码对代码中提到的“FILE.txt”文件所做的更改,因为在线 IDE 上不存在此类文件。因此,您需要将代码复制到 SYSTEM 编译器并观察文件的更改
无论文件中存在什么内容,它都会将您的文件同步到设备并覆盖数据。现在文件“FILE.txt”的内容将是

GEEKS

您提到,即使不存在这样的文件,它也会自行创建该文件,同步文件并写入内容。
输出 :

Use of Sync Successful :) 
  • valid() : Java.io.File.valid()检查 FileDescriptor 对象是否有效。
    句法 :
public boolean valid()
Parameters :
-----------
Return : 
true : if the FileDescriptor object is valid else, false
Exception : 
-----------

Java

// Java program explaining the working of valid() method
 
import java.io.*;
 
public class NewClass
{
    public static void main(String[] args) throws IOException
    {
        // Initializing a FileDescriptor
        FileDescriptor geek_descriptor = null;
        FileInputStream geek_in = null;
 
        try
        {
            geek_in = new FileInputStream("FILE.txt");
 
            // get file descriptor
            geek_descriptor = geek_in.getFD();
 
            boolean check = false;
 
            // Use of valid() : checking the validity of FileDescriptor
            check = geek_descriptor.valid();
 
            System.out.print("FileDescriptor is valid : "+check);
 
        }
        catch(Exception except)
        {
            // if in case IO error occurs
            except.printStackTrace();
        }
        finally
        {
            // releases system resources
            if(geek_in!=null)
                geek_in.close();
        }
    }
}

笔记 :
您无法看到此代码对代码中提到的“FILE.txt”文件所做的更改,因为在线 IDE 上不存在此类文件。因此,您需要将代码复制到 SYSTEM 编译器并观察文件的更改。此方法将检查我们的 FileDescriptor 的有效性。
自从。我们代码中的 FileDescriptor 是有效的,所以返回 true

输出 :

FileDescriptor is valid : true

概括:

  • Java.io.File.sync() :将所有缓冲区与底层设备同步。
  • Java.io.File.valid()检查 FileDescriptor 对象是否有效。