草庐IT

java - 如果不存在,则使用干净的 Java 7 方法创建文件

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭7年前。Improvethisquestion如果文件不存在,Java7或Java8创建文件的方法是什么?

java - 使用Java的FileLock时,是否可以让close()自动做一个lock.release()?

正如大多数人应该知道的那样,close()还会关闭所有流的使用。这允许以下代码:BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream(...)));...br.close();这很好,因为我们不需要对FileInputStream的引用并记得关闭它。但是它也适用于FileLock吗?finalFileInputStreamfis=newFileInputStream(newFile("buffer.txt"));finalFileChannelc=fis.getChannel();final

java - 为什么 FileChannel.map 占用了 Integer.MAX_VALUE 的数据?

我在使用FileChannel.map时遇到以下异常Exceptioninthread"main"java.lang.IllegalArgumentException:SizeexceedsInteger.MAX_VALUEatsun.nio.ch.FileChannelImpl.map(UnknownSource)atniotest.NioTest.readUsingNio(NioTest.java:38)atniotest.NioTest.main(NioTest.java:64)快速查看OpenJdk实现表明FileChannelImpl中的方法map(..)将long类型的si

java - 选择器在内部是如何实现的?

我刚刚开始探索javaNIO,非阻塞IO。我有兴趣了解实现背后的基础知识。Java选择器和物理套接字之间的通信是如何建立的?是否有操作系统级线程不断轮询底层资源?每个选择器是否有任何java线程不断轮询以接收这些事件?你们中有人可以指出我这一点吗? 最佳答案 不,select的意义在于您不必在没有任何事情发生时浪费循环轮询。每个操作系统都以某种方式或其他方式(通常通过硬件中断)实现此功能,并通过select()系统调用将其提供给用户空间程序。与Java语言的联系是,如果您使用正确的NIO类和方法,JVM现在包含将为您调用操作系统的s

java - 如何处理一个非常大的文本文件?

我目前正在编写一些需要处理非常大的文本文件(至少几个GiB)的东西。这里需要的(这是固定的)是:基于CSV,遵循RFC4180,但嵌入式换行符除外随机读取行,但主要是逐行读取并接近末尾在末尾追加几行(换行)。显然,需要重写文件的其余部分,这种情况也很少见,所以目前不是特别重要文件的大小不允许将其完全保留在内存中(这也是不可取的,因为在附加时应尽快保留更改)。我曾考虑过使用内存映射区域作为进入文件的窗口,如果请求超出其范围的行,该区域会四处移动。当然,那个阶段我还没有字节级别以上的抽象。为了实际处理内容,我有一个CharsetDecoder给我一个CharBuffer。现在的问题是,我可

java - 具有阻塞应用程序的 Tomcat NIO 连接器

在阅读了有关TomcatNIO连接器的信息后,我仍然不明白一件事:如果应用程序代码阻塞,nio连接器是否有益,即它在从数据库读取、读取文件系统、调用外部Web时阻塞服务?因此,例如,您有一个类似REST的API,它接收请求、从数据库读取内容并返回响应。它不使用servlet3async,它只是写入响应。我没有找到NIO连接器使用的线程池的完整描述,但我想它有一个线程池来处理请求,所以每个请求都在它自己的线程中结束,它可以阻塞。如果是这样,NIO的优势是否仍然存在,或者阻塞代码削弱了NIO的优势(在资源利用方面)? 最佳答案 Isth

java - 在 Java 中打开一个大文件非常慢

我有一个大(12GB)文件,我需要使用Java从中提取小块数据(每个几千字节)。打开文件后,查找和读取数据非常快,但打开文件本身需要长时间-大约90秒。有没有办法加快Java中打开文件的操作?为了澄清,我尝试了以下选项来打开和读取文件:newFileInputStream(file);newRandomAccessFile(file,"r");Files.newByteChannel(path,StandardOpenOption.READ);其中每一个都产生了相似的结果。 最佳答案 来自评论:具体问题是Java的打开文件操作触发了

java - 是否可以通过 Java NIO 非阻塞套接字异步访问数据库?

我想以非阻塞方式访问数据库,换句话说,我将通过一个套接字发送SQL请求,并通过同一个套接字异步读取查询响应。这意味着我只在套接字可用时从套接字读取数据(JavaNIOSocketChannel),所以我从不阻塞。我可能是错的,但据我所知,数据库的JDBC驱动程序都使用阻塞套接字。即使我必须执行一个返回100万行的查询,我也可以异步执行,在套接字缓冲区中可用时接收行。我的目标是在不阻塞的情况下执行SQL查询(即不产生延迟)。使用单独的线程不是一种选择。我需要在网络线程(NIO选择器线程)中执行此操作。有没有人成功做到这一点,或者可以推荐一种不涉及额外线程的方法?

java - Files.exists(path) 和 path.toFile().exists() 对同一个文件给出不同的结果

对于Windows上的本地文件,我得到的Files.exists(path)与path.toFile().exists()的结果不同。我可以在Windows资源管理器中看到这个文件,尽管我(随机)修改了权限并且权限可能没有意义。但这并不能解释为什么旧方法返回true而新方法返回false。该文件确实存在,但运行Java代码的用户可能看不到它,因此我不确定正确答案应该是什么。我也看不到如何查看哪个用户正在运行代码,计算机上只有一个真实用户Paul,但我想知道是否以管理员身份运行是否会影响事情。System.out.println("PathExists(1):"+Files.exists

file - 如何导入java.nio.file包

我试图监听一个目录的变化,然后发现java.nio.*被开发用来有效地处理此类任务等等。然后从oracle下载jdk1.7.0_02并用它启动eclipse。然后创建了新的java项目,尝试从java.nio.file中实现一些类,哦,我的眼睛!“无法解析导入java.nio.file”。我是否必须在包含此类包的整个jdk1.7.0_02目录中找到一些.jar?还是我的类路径有问题?提前致谢!! 最佳答案 您有不同版本的JDKs.您只需要设置JDK7/JRE7版本的eclipse项目。您也可以在创建新项目时选择执行环境JRE为Jav