当您同时打开同一文件上的两个(或多个)FileOutputStreams时会发生什么?
在Java的API这样说:
特别是某些平台,一次只允许一个FileOutputStream(或其他文件写入对象)打开一个文件进行写入。
我猜想Windows并不是一个这样的平台,因为我有两个线程读取一个大文件(每个都不同),然后将其写入相同的输出文件。没有异常被抛出,文件被创建并且似乎包含两个输入文件中的块。
附带问题:
当文件有另一个编写器时,没有一种可靠的跨平台方式来被动地通知用户,即,如果文件已经打开可写,则会引发异常。但是,有两种技术可以帮助您主动进行检查。
如果该文件可能有多个进程(可能是Java和非Java的混合),请使用FileLock
。成功使用文件锁的关键是记住它们只是“建议”。如果您检查该锁,可以确保该锁是可见的,但是如果您忘记了它,它也不会阻止您对文件执行操作。访问文件的所有进程都应设计为使用锁定协议。
如果单个Java进程正在处理该文件,则可以使用Java内置的并发工具来安全地进行处理。您需要一个对所有线程可见的映射,该映射将每个文件名与其对应的锁实例相关联。通过使用对象或文件的规范路径,可以轻松调整相关问题的答案,以实现此File
目的。锁定对象可以是,流周围的包装器或。FileOutputStream
ReentrantReadWriteLock
问题内容: 我需要将文件和文件夹隐藏在Windows和Linux上。我知道在后面加上“。” 文件或文件夹的开头将使其在Linux上隐藏。如何在Windows上隐藏文件或文件夹? 问题答案: 对于Java 6及更低版本, 您将需要使用本地调用,这是Windows的一种方法 您应该了解有关win32-api或Java Native的知识。
我有一个巨大的文件(2GB),其中只包含员工编号。我必须阅读此文件,获取员工号码并调用数据库以获取员工的工资,然后将其写入另一个文件中,并将员工姓名和工资作为其行。 现在的问题是,通过直接读取这个巨大的文件通过简单的nio在java我的STS内存溢出或它需要4-5小时来完成整个读-取-写过程。 所以我想用Java并发来拯救我。 为此,我有一个实现Runnable的EmployeeDetails类,
问题内容: 我知道我们应该在问题中添加一些代码,但是我非常傻眼,无法束手无策,也找不到任何可循的例子。 基本上,我想打开文件 C:\ A.txt ,其中已经包含内容,并在末尾写一个字符串。基本上是这样的。 文件A.txt包含: 我想打开它并在末尾写Sue,所以文件现在包含: 抱歉,没有代码示例,今天早上我的大脑死了。 问题答案: 请搜索Larry Page和Sergey Brin向全世界发布的Go
问题内容: 我有一个名为helloworld.jar的JAR文件。为了运行它,我在命令行窗口中执行以下命令: 这可以正常工作,但是我如何双击执行它?我需要安装任何软件吗? 问题答案: 最简单的方法可能是升级或重新安装Java Runtime Environment(JRE)。 或这个: 打开Windows资源管理器,从“工具”中选择“文件夹选项…” 单击文件类型选项卡,向下滚动并选择JAR文件类型
我正在编写一个java代码,它利用Apache-poi读取ms-office.doc文件,利用itext jar API创建并写入pdf文件。我已经阅读了.doc文件中打印的文本和表格。现在我正在寻找一个读取文档中写入的图像的解决方案。我已经编写了如下代码来读取文档文件中的图像。为什么这段代码不起作用。 存在的问题是:1。条件if(Picture.HasPicture(run))不满足,但文档具有
问题内容: 我有一个可以捕获一些数据的Shell脚本。我想将结果打印到文件中,但是这样做会阻止结果显示在终端上。有没有办法既可以在屏幕上打印结果,又可以写入文件。提前致谢。 问题答案: 将输出通过管道传递给命令。 例: 请注意,标准输出已打印出来并写入thr 命令指定的文件中。