`

file 同时 读写删除

 
阅读更多

1,同时可以读写,写写,但读写时不能删除。运行下面代码并通过输出验证

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;

public class TestFile {
    
    public static void main( String[] args ) {
        final TestFile testFile = new TestFile();
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0; i< 10; i++){
                    try {
                        Thread.sleep( 100 );
                    }
                    catch ( InterruptedException e ) {
                        e.printStackTrace();
                    }
                    testFile.write( Thread.currentThread() + "- line - "+i +"\n");
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0; i< 10; i++){
                    try {
                        Thread.sleep( 100 );
                    }
                    catch ( InterruptedException e ) {
                        e.printStackTrace();
                    }
                    testFile.read();
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0; i< 10; i++){
                    try {
                        Thread.sleep( 100 );
                    }
                    catch ( InterruptedException e ) {
                        e.printStackTrace();
                    }
                    testFile.write( Thread.currentThread() + "- line - "+i +"\n");
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep( 500 );
                    Files.delete( new File( "d:/a.txt" ).toPath() );
                }
                catch ( Exception e ) {
                    //java.nio.file.FileSystemException: d:\a.txt: The process cannot access the file because it is being used by another process.
                    e.printStackTrace();
                }
            }
        }).start();
    }
    
    private void write(String str){
        try {
            FileOutputStream fos = new FileOutputStream( "d:/a.txt",true );
            fos.write( str.getBytes() );
        }
        catch ( Exception e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    private void read(){
        try {
            FileInputStream fis = new FileInputStream( "d:/a.txt" );
            BufferedReader br = new BufferedReader( new InputStreamReader( fis ) );
            String str = br.readLine();
            while(str != null){
                System.out.println(str);
                str = br.readLine();
            }
        }
        catch ( Exception e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}

 2,必须流关闭才能删除,rename(这个很特殊,win与linux下表现不同,getName()也很神奇)。外部流和内部类close效果一样。因为是委托代理组合,内部类的close

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class TestFile {

    public static void main( String[] args ) {
        final TestFile testFile = new TestFile();
        testFile.write( "test - line -1. \n" );
    }

    private void write( String str ) {
        try {
            File file = new File( "d:/a.txt" );
            FileOutputStream fos = new FileOutputStream( file, true );
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( fos ));
            bw.write( str );
            System.out.println(file.renameTo( new File( "d:/a1.txt" ) ));
            System.out.println(file.getName()+" delete result = " + file.delete());
            bw.close();
            fos.close();
            System.out.println(file.renameTo( new File( "d:/a1.txt" ) ));
            System.out.println(file.getName()+" delete result = " + file.delete());
        }
        catch ( Exception e ) {
            e.printStackTrace();
        }
    }
}

 

分享到:
评论

相关推荐

    oracle中utl_file包读写文件操作实例学习

    总的来说,Oracle的UTL_FILE包为开发者提供了一套完整的文件操作接口,可以在数据库环境中方便地处理文本文件,进行读写、复制、重命名和删除等操作。理解并熟练使用UTL_FILE,能够极大地提升数据库管理的效率,尤其...

    Java的File类文件读写以及图片下载的总结

    以下是对`File`类以及文件读写、复制和图片下载的详细讲解。 1. **文件和文件夹的创建** 使用`File`类可以方便地创建新的文件或目录。例如,通过调用`createNewFile()`方法可以创建一个新文件,但需确保路径正确且...

    Android 13读写权限变更,小米14 txt 文件读写

    但是,如果需要将内部文件共享给其他应用,建议使用`FileProvider`,它可以安全地提供文件的Uri,同时避免了权限问题。 总的来说,Android 13的读写权限变更使得开发者必须更加谨慎地处理文件操作,尤其是当涉及到...

    内部存储读写文件

    本文将详细介绍如何在Android Studio中获取内部存储路径,创建文件夹,以及进行读写和删除文件的操作。 首先,获取内部存储路径通常使用Android的`getFilesDir()`或`getInternalStorageDirectory()`方法。`...

    VS2019C++编译FileGDB_API_1.5.2

    该API允许程序员在C++环境下创建、读取、更新和删除FGDB中的地理数据,它与ArcGIS 10的GDB Schema相兼容。本文将详细介绍如何在Visual Studio 2019(VS2019)环境下编译FileGDB_API 1.5.2。 **1. 安装与配置** ...

    U盘文件读写模块的说明,单片机读写U盘

    同时,对于大容量的U盘,可能需要分块读写以避免内存瓶颈。 总结,通过单片机配合CH375芯片实现U盘文件读写是一项综合性的任务,涵盖了硬件接口设计、文件系统理解和软件编程等多个方面。理解并掌握这些知识点,...

    C#文件读写常用类介绍

    `File.Delete()`方法用于删除指定路径下的文件。这是一个非常直接的方法,只需提供文件路径即可执行删除操作: ```csharp File.Delete(@"c:\temp\uploads\newFile.txt"); ``` 此方法会立即删除文件,没有撤销机制...

    VBS读写及创建、删除文件

    "VBS读写及创建、删除文件" VBS(Visual Basic Scripting)是一种脚本语言,可以用来读写文件、创建文件、删除文件等操作。在本文中,我们将详细介绍VBS读写文件、创建文件、删除文件的方法。 读写文件 在VBS中,...

    C#文件读写操作

    本文将深入探讨如何在C#中执行文件的读写操作,以及如何进行文件删除。 首先,让我们了解C#中用于文件操作的主要类:`System.IO`命名空间中的`File`和`StreamReader`、`StreamWriter`。`File`类提供了许多静态方法...

    Android应用源码SdCard读写文件实例

    使用`File`类的方法`createNewFile()`创建文件,`mkdir()`或`mkdirs()`创建目录,`delete()`删除文件或目录。 ```java File newFile = new File(sdCardRoot, "new_file.txt"); newFile.createNewFile(); // ...

    文件读写监控工具文件读写监控工具文件读写监控工具

    文件读写监控工具是计算机系统管理和维护中不可或缺的软件,它们可以帮助用户跟踪、记录和分析系统中的文件操作,包括打开、创建、修改、删除等动作。这类工具在故障排查、性能优化、安全审计等方面有着广泛的应用。...

    C#文件的读写c#基础中文件读写课程中一些常用类

    总之,C#提供了强大且易用的文件操作工具,通过`System.IO.File`和`System.IO.FileInfo`类,开发者能够方便地完成文件的读写、创建、删除、复制和移动等一系列操作,从而满足各种应用程序的需求。在实际编程中,结合...

    u盘读写控制源程序_ch376

    在文件系统接口部分,提供了文件系统接口函数,例如FILE_SYS.H和FILE_SYS.C,用于实现u盘读写控制的文件系统操作。这些接口函数可以实现文件的读取、写入、删除等操作。 u盘读写控制源程序_ch376提供了一个完整的...

    C# File文件操作

    在C#编程语言中,File类是System.IO命名空间下的一个关键组件,它提供了大量用于读写、创建、移动和删除文件的静态方法。在这个"集合篇"中,我们将深入探讨C#中File类的各种操作,并通过源码分享来增强理解。 首先...

    utl_file包介绍

    UTL_FILE 包是 Oracle 提供的一个文件操作包,主要用于读写文件和目录。该包的应用非常广泛,且非常实用,因为 Oracle 虽然有 SQL*Loader 可以将文本的内容读到数据库里,但是不能将数据库内容输出到文本。因此,在...

    java文件读写操作

    - `File`类提供了诸如`exists()`检查文件是否存在,`delete()`删除文件,`createNewFile()`创建新文件等方法。 7. **NIO(非阻塞I/O)**: - 自Java 7起,引入了NIO.2,提供更高效和更灵活的文件操作,如`Files`...

    android中sdcard的读写.doc

    - 创建与删除文件权限: ```xml &lt;uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /&gt; ``` - 写入数据权限: ```xml ``` #### 四、具体的读写实现 1. **判断SDCard是否可用...

    C#对TXT读写实例

    在这个命名空间下,`File`类是我们进行文件读写的主要工具。以下是一些基本操作的示例: 1. **新建TXT文件**: 使用`File.WriteAllText`方法可以创建新的TXT文件并写入内容。例如: ```csharp string content = ...

Global site tag (gtag.js) - Google Analytics