Tag: io

将二进制文件读入字符串

这一点显而易见,但我无法弄清楚。 我花了差不多一整天的时间。 我很乐意给那些可以照亮我的人买啤酒。 File file = new File(filePath); byte[] bytes = new byte[(int)file.length()]; DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); dataInputStream.readFully(bytes); dataInputStream.close(); return new String(bytes); 这是我的代码。 我看到字节数组大小不正常,但我无法找出合适的大小。 除此之外,内容也不正确。 似乎只有文字字符可以。 似乎从二进制文件中获取数据是一种真正的痛苦,我真的很沮丧。 还有一件事:文件内容不是文本,可以是图片,video或pdf。

文件存在时抛出FileNotFoundException

我正面临这个奇怪的问题。 我正在尝试将位于另一台计算机上的文件作为共享资源读取: \\remote-machine\dir\MyFileHere.txt 当我运行一个独立的应用程序(16行java文件)时,一切都很好。 但是当我尝试使用相同的类和相同的方法从服务器“引擎”(这是一个应用程序引擎,就像你可以运行java程序的Java EE应用程序服务器)中读取相同的文件时,“FileNotFoundException”被抛出。 我虽然我会获得某种权限,所以我将资源映射为驱动器:K:\ 重新运行我的java文件,读取,罚款。 在“引擎” – > FileNotFoundException中重新运行我的java文件。 当我将文件复制到本地计算机(C:\ MyFileHere.txt)时,不会抛出任何exception。 题 可能导致此FileNotFoundExcecption的原因是什么? 我正在使用Java 1.5 据我所知,引擎几乎透明地使用java。 有人遇到过类似的事吗? 补充问题? 这对解决方法有什么好处? 我开始考虑提供服务这些文件的tomcat安装并通过http读取它们,但我认为这太多了,这就是为什么SMB协议首先出现的原因不是吗? 也许我无论如何都无法打开sockets。 安全管理器可能是原因(我之前从未使用过,但我知道它存在) 如果出现这种情况,是否会抛出SecurityException? 非常感谢。 编辑 解决了。 谢谢史蒂夫W. 事实certificate,该引擎是与ZeroG的“LaunchAnywhere”一起发布的。 因此,创建一个.exe,然后将使用指定的应用程序运行JVM。 这个应用程序本身就是Launcher。 当它启动引擎时,以某种方式(我无法弄清楚为什么或如何)拥有JVM进程的用户是SYSTEM。 史蒂夫指出,该用户没有NETWORK访问权限,因此无法从共享资源或映射驱动器中读取。 解决方法(当我向制造商报告时)是创建一个.cmd文件来手动启动引擎。 由于它将手动启动,因此用户可以访问网络。 我使用了SysInternals的“Process Explorer”来确切地知道用于运行引擎应用程序的命令行。 真是一团糟! 感谢那些发布答案的人。

java.util.zip – ZipInputStream vs ZipFile

我有一些关于java.util.zip库的一般性问题。 我们基本上做的是导入和导出许多小组件。 以前,这些组件是使用单个大文件导入和导出的,例如: 请注意,导入期间组件的顺序是相关的。 现在每个组件都应该占用自己的文件,该文件应该是外部版本的,QA-ed,bla,bla。 我们决定导出的输出应该是一个zip文件(包含所有这些文件),我们导入的输入应该是一个类似的zip文件。 我们不想在我们的系统中爆炸zip。 我们不希望为每个小文件打开单独的流。 我目前的问题: Q1。 ZipInputStream保证zip条目(小文件)的读取顺序与我们使用ZipOutputStream的导出插入的顺序相同吗? 我认为阅读是这样的: ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis)); ZipEntry entry; while((entry = zis.getNextEntry()) != null) { //read from zis until available } 我知道中央zip目录放在zip文件的末尾,但是内部的文件条目有顺序。 我也知道依靠订单是一个丑陋的想法,但我只想记住所有的事实。 Q2。 如果我使用ZipFile (我更喜欢),调用getInputStream()几百次会对性能产生什么影响? 它会比ZipInputStream解决方案慢得多吗? zip只打开一次, ZipFile由RandomAccessFile支持 – 这是正确的吗? 我认为阅读是这样的: ZipFile zipfile = new ZipFile(argv[0]); Enumeration e = zipfile.entries();//TODO: assure the order […]

我的Tomcat应用程序可以在Ubuntu服务器上写什么文件夹

在这种情况下,我不确定我使用Ubuntu Server的事实是否重要。 当我尝试使用File.mkdirs()方法创建文件夹时,它不会抛出exception,只是永远不会工作。 可以在此处找到有关特定代码引用的问题的更大解释: 无法在服务器上创建目录。 许可问题? 我写一个新问题的原因是因为我想知道我是否因为权限而在服务器上创建目录时遇到问题。 String path = /home/username/foldertocreate; File file = new File(path); file.mkdirs(); 所以我想在/ home / username目录中创建一个文件夹。 当我在我的开发盒上以及Eclipse内部的tomcat实例上以dev模式运行时,这很好用,但是当代码在服务器上运行时失败。 这可能是因为在开发框中用户已登录,因此打开了写入/ home / username文件夹的权限? 在服务器上,用户在程序运行时实际上没有登录… 我能写一个特定的文件夹吗? 我检查了当前设置为700的文件夹的权限。这可能是问题吗? 将此文件夹设置为666或777是否安全? 即使用户未登录,此文件夹是否可写? 更新:尝试将文件夹权限更改为755,没有运气。

非阻塞文件读取

java中是否有非阻塞文件读取API? 如果不是,用C ++构建一个并通过JNI从Java应用程序调用它是否明智?

在java中执行IO操作的最佳线程数是多少?

在Goetz的“实践中的Java并发”中,在第101页的脚注中,他写道:“对于这样的计算问题,没有I / O并且不访问共享数据,Ncpu或Ncpu + 1线程产生最佳吞吐量;更multithreading不帮助,实际上可能会降低性能…“ 我的问题是,当执行文件写入,文件读取,文件删除等I / O操作时,是否有用于实现最高性能的线程数的指导原则? 我知道这只是一个指导编号,因为磁盘速度和许多其他因素都会影响到这一点。 不过,我想知道:在4-cpu机器上,20个线程可以将1000个单独的文件写入磁盘,而不是4个线程吗?

在使用commons-io的IOUtils.toString(输入)后,是否需要手动关闭输入流?

Commons-IO有一个IOUtils.toString(inputStream)方法,它可以读取输入流中的所有内容: InputStream input = getInputStream(); String content = IOUtils.toString(input); 我的问题是我在使用后手动关闭输入流吗? 我以为IOUtils可能会关闭它,因为它已经阅读了所有内容,但我在源代码中找不到它。

计算文件中的单词数

我在计算文件中的单词数时遇到问题。 我正在采取的方法是当我看到一个空间或一个新线时,我知道要算一个字。 问题是,如果我在段落之间有多行,那么我最终也将它们视为单词。 如果你看一下readFile()方法,你就可以看到我在做什么。 你能帮助我并指导我如何解决这个问题吗? 示例输入文件(包括空行): word word word word word word word word

BufferedReader和BufferedInputStream之间的区别

java中的BufferedReader , BufferedInputStream和Scanner什么区别? BufferedReader读取文本, BufferedInputStream读取byte 。 除此之外有什么区别吗?

Java IO是否具有最大文件名长度?

不同的操作系统具有不同的文件名最大长度。 在处理文件时,Java是否对文件名长度有任何限制?