Tag: io

如何使用Java编辑MS Word文档?

我有几个Word模板,我的要求是使用Java基于用户输入替换文档中的一些单词/占位符。 我尝试了很多库,包括2-3个版本的docx4j但没有什么工作,他们都没有做任何事情! 我知道之前已经问过这个问题,但我尝试了所有我知道的选项。 那么,使用什么java库我可以“真正”替换/编辑这些模板? 我倾向于使用“易于使用/几行代码”类型库。 我正在使用Java 8,我的MS Word模板在MS Word 2007中。 更新 此代码是使用SO成员Joop Eggen提供的代码示例编写的 public Main() throws URISyntaxException, IOException, ParserConfigurationException, SAXException { URI docxUri = new URI(“C:/Users/Yohan/Desktop/yohan.docx”); Map zipProperties = new HashMap(); zipProperties.put(“encoding”, “UTF-8”); FileSystem zipFS = FileSystems.newFileSystem(docxUri, zipProperties); Path documentXmlPath = zipFS.getPath(“/word/document.xml”); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(Files.newInputStream(documentXmlPath)); […]

在读取xml文件后阻止文件通道关闭

有关此目标背后的动机(以及我解决此问题的努力)的更多详细信息,请查看我之前的问题 。 我决定将这个问题完全视为一个新问题,因为我认为它已经发展到足够值得这样做。 总而言之,我打算将JDOM与NIO结合使用,以便: 在xml文件上获得独占文件锁。 将文件读入Document对象。 进行任意更改(锁定仍然有效!)。 将更改写回xml文件。 释放文件锁。 但是我得到的问题是,将xml文件读入文档对象的内置代码会关闭通道(因此会释放锁定),如下所示: import java.io.*; import java.nio.channels.Channels; import java.nio.channels.FileChannel; import javax.xml.parsers.*; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class Test4{ String path = “Test 2.xml”; private DocumentBuilderFactory dbFactory; private DocumentBuilder dBuilder; private Document doc; public Test4(){ try (final FileChannel channel = new RandomAccessFile(new File(path), “rw”).getChannel()) { dbFactory = DocumentBuilderFactory.newInstance(); dBuilder […]

在准备好读取的多个套接字中进行选择

我正在编写服务器客户端应用程序。 我有一个服务器,它拥有我从ServerSocket的accept()方法获得的几个套接字。 我想从这些套接字读取,但我不知道哪个套接字可以读取。 我需要某种选择器来选择一个可以读取的套接字,这样我就可以读取它发送的数据了。 谢谢。

Java:InputStream read()返回一个大于127的字节?

我有这段代码: InputStream is = socket.getInputStream(); int b; while ((b = is.read()) != -1) { System.out.println(b); } 一个字节,其范围是-128直到+127 。 但其中一个打印字节是210 。 这是将读取byte转换为int吗? (这样negatif byte变成了一个positif int ) 如果是这样,我可以通过将int转换为byte来做同样的事情(使用OutputStream )吗? 谢谢, 马亭

为什么缓冲区写入者不写入文件?

这是代码片段。 read = new FileReader(“trainfiles/”+filenames[i]); br = new BufferedReader(read); while((lines = br.readLine())!=null){ st = new StringTokenizer(lines); while(st.hasMoreTokens()){ bw = new BufferedWriter(new FileWriter(“files/file.txt”)); bw.write(st.nextToken()); bw.newLine(); } } 编辑:我正在从目录中读取文件。 所以,我需要在每个循环中打开阅读器。 我做了一些修改,但后来也没有写入该文件。 这是代码: for(i=0;i==0;i++){ if(filenames[i].matches(“.*ham.*”)){ System.out.println(“ham:”+filenames[i]); read = new FileReader(“trainfiles/”+filenames[i]); br = new BufferedReader(read); while((lines = br.readLine())!=null){ st = new StringTokenizer(lines); while(st.hasMoreTokens()){ System.out.println(st.nextToken()); bw.write(st.nextToken()); } } bw.close(); br.close(); […]

任何从JAR获取File对象的方法

我有一个JAR文件,其中包含使用外部模型文件的API。 我想将模型文件包含在JAR本身中,以便更容易用于其他开发人员。 API只接受File对象,有没有办法做到这一点? 我已经尝试了以下内容,但它们都失败了: 使用class.getResourceAsStream()。 如果API接受了InputStream,这将起作用。 解析类路径并尝试从条目构建(JAR将显示为app.jar) 我想一个选项是使用getResourceAsStream并将文件移动到HDD上的永久位置,但是,我不喜欢这个选项。 必须有更好的东西,任何想法?

Java I / O:如何附加到现有的文本文件

嗨我写入或附加到文件没有问题,唯一的问题是,一旦我退出程序然后再次运行它,它会创建一个新文件覆盖我的原始文件。 这是一个问题,因为我使用文本文件来保持运行计数。 有没有办法将已创建的文本文件作为对象,然后附加到它? 提前致谢。

如何用Java测量基准测试中的磁盘速度

我想知道如何使用Java API测量磁盘速度。 随机读取,顺序读取和随机和顺序写入。 如果有人认为这不是一个真正的问题。 请在关闭之前解释一下。 谢谢

从JAR中的资源文件夹加载属性

我有一个JAR文件Movie Library.jar,其内容如下所示: AttributeUtils类位于client.jar中(如图所示),属性文件位于属性文件夹中,该文件夹位于resources文件夹中。 我正在尝试加载属性: String absolutePath = LazyProperties.class.getClass().getResource(filePath).getPath(); File file = new File(absolutePath); InputStream stream = new FileInputStream(file); Properties properties = new Properties(); properties.load(stream); 但它显示: file:\D:\Code\MovieLibrary\build\jar\Movie%20Library.jar!\resources\properties\movie_library.properties (The filename, directory name, or volume label syntax is incorrect) 我无法将其视为System.out.println(file)打印: file:/D:/Code/MovieLibrary/build/jar/Movie%20Library.jar!/resources/properties/movie_library.properties 任何帮助都是值得的。 提前致谢。

当高吞吐量(3GB / s)文件系统可用时,如何使用Java中的多个线程读取文件

据我所知,对于普通的Spindle Drive系统,使用multithreading读取文件效率很低。 这是一个不同的情况,我有一个高吞吐量文件系统可供我使用,它提供高达3GB / s的读取速度,具有196个CPU内核和2TB RAM 单线程Java程序以最大85-100 MB / s的速度读取文件,因此我有可能比单线程更好。 我必须读取大小为1TB的文件,并且我有足够的RAM来加载它。 目前我使用以下或类似的东西,但需要用multithreading编写一些东西以获得更好的吞吐量: Java 7文件:50 MB / s List lines = Files.readAllLines(Paths.get(path), encoding); Java commons-io:48 MB / s List lines = FileUtils.readLines(new File(“/path/to/file.txt”), “utf-8”); 与番石榴相同:45 MB / s List lines = Files.readLines(new File(“/path/to/file.txt”), Charset.forName(“utf-8”)); Java Scanner类:非常慢 Scanner s = new Scanner(new File(“filepath”)); ArrayList list = new […]