Tag: file io

java:更改ZipEntry名称

我有以下代码将文本文件写入zip: FileOutputStream fOut = new FileOutputStream(fullFilename, false); BufferedOutputStream bOut = new BufferedOutputStream(fOut); ZipOutputStream zOut = new ZipOutputStream(bOut); zOut.putNextEntry(new ZipEntry(“aFile1.txt”)); //Do some processing and write to zOut… zOut.write(…); (…) zOut.closeEntry(); zOut.close(); //Etc (close all resources) 我需要在写入后更改zipEntry的文件名(因为它的名称将取决于其编写的内容)。 此外,只有在最终文件名已知时才能写入缓冲区并写入文件(因为文件大小可能非常大:内存不足)。 任何有关如何做到这一点的建议将不胜感激! 谢谢,托马斯

字符串中的换行符未写入文件

我正在尝试编写一个程序来处理从文件中读入的unicode字符串。 我想到了两种方法 – 一种是我读取包含换行符的整个文件,执行几次正则表达式替换,然后将其写回另一个文件; 另一个我在文件中逐行读取并匹配各行并替换它们并将其写出来的地方。 我无法测试第一种方法,因为字符串中的换行符不会写为文件的换行符。 以下是一些示例代码: String output = “Hello\nthere!”; BufferedWriter oFile = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(“test.txt”), “UTF-16”)); System.out.println(output); oFile.write(output); oFile.close(); print语句输出 你好 那里! 但文件内容是 你好! 为什么我的换行不写入文件?

FileChannel和RandomAccessFile似乎不起作用

简单来说:使用sqlitejdbc作为后端的swing应用程序。 目前,启动使用相同数据库文件的多个实例没有问题。 应该有。 该文件已被锁定(在应用程序运行时无法将其删除)因此检查应该是微不足道的。 事实certificate不是。 File f = new File(“/path/to/file/db.sqlite”); FileChannel channel = new RandomAccessFile(f, “rw”).getChannel(); System.out.println(channel.isOpen()); System.out.println(channel.tryLock()); 结果是 true sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid] 无论应用程序是否正在运行。 我错过了这一点吗? TIA。

从java中的文件中删除一行

好的,所以我试图用java删除文本文件中的行。 目前我正在这样做的方式是跟踪行号并输入索引。 索引是我要删除的行。 因此,每次我读取新的数据行时,我都会增加行数。 现在当我到达相同索引的行数时,我不会将数据写入临时文件。 现在这可行,但如果我正在使用大文件而且我不得不担心内存限制。 我怎么能用…文件标记呢? 例如..将文件标记放在我要删除的行上。 然后删除该行? 或者那只是太多的工作?

读取12 MB的巨大文件时出现问题(java.lang.OutOfMemoryError)

我需要打开一个12兆字节的文件,但实际上我正在创建一个12834566字节的缓冲区,因为该文件的大小是12MB,我正在为Android移动系统开发这个应用程序。 然后,我想我必须用1024 KB的块读取而不是一块12 MB的块,有一个for,但我不知道该怎么做,我需要一些帮助。 这是我的实际代码: File f = new File(getCacheDir()+”/berlin.mp3″); if (!f.exists()) try { InputStream is = getAssets().open(“berlin.mp3”); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); FileOutputStream fos = new FileOutputStream(f); fos.write(buffer); fos.close(); } catch (Exception e) { throw new RuntimeException(e); } 请问,有人能告诉我在这段代码中我需要更改的内容是读取1024 KB的块而不是一块12 MB的块吗? 谢谢!

在Java中读取IDX文件类型

我用Java构建了一个图像分类器,我想针对这里提供的图像进行测试:http: //yann.lecun.com/exdb/mnist/ 不幸的是,如果您下载train-images-idx3-ubyte.gz或任何其他3个文件,它们都是文件类型:.idx1-ubyte 第一个问题:我想知道是否有人可以向我提供有关如何将.idx1-ubyte转换为位图(.bmp)文件的说明? 第二个问题:或者我一般如何阅读这些文件? 有关IDX文件格式的信息:IDX文件格式是各种数字类型的向量和多维矩阵的简单格式。 基本格式是: magic number size in dimension 0 size in dimension 1 size in dimension 2 ….. size in dimension N data 幻数是一个整数(MSB优先)。 前2个字节始终为0。 第三个字节编码数据的类型: 0x08: unsigned byte 0x09: signed byte 0x0B: short (2 bytes) 0x0C: int (4 bytes) 0x0D: float (4 bytes) 0x0E: double (8 bytes) 第4个字节编码向量/矩阵的维数:1表示向量,2表示矩阵…. 每个维度的大小为4字节整数(MSB优先,高端,与大多数非英特尔处理器一样)。 数据存储在C数组中,即最后一维中的索引变化最快。

createTempFile是线程安全的吗?

我正在使用Java 6。 调用createTempFile(类java.io.File)的两个线程是否可能获得相同的临时文件?

如何锁定文件

我有一个write方法,应该安全地将数据写入文件。 // The current file I am writing to. FileOutputStream file = null; … // Synchronized version. private void write(byte[] bytes) { if (file != null && file.getChannel() != null) { try { boolean written = false; do { try { // Lock it! FileLock lock = file.getChannel().lock(); try { // Write the bytes. file.write(bytes); […]

如何获取打开文件弹出窗口

现在,我有一个设置类路径,但我想弹出一个打开的文件,用户选择打开哪个文件。 我已经尝试过JFileChooser,但到目前为止还没有成功。 这是我的代码: public static void main(String[] args) throws IOException { JFileChooser chooser = new JFileChooser(); int returnValue = chooser.showOpenDialog( null ) ; if( returnValue == JFileChooser.APPROVE_OPTION ) { File file = chooser.getSelectedFile() ; } // I don’t want this to be hard-coded: String filePath = “/Users/Bill/Desktop/hello.txt”; 我该怎么做呢?

如何读取.bmp文件来识别Java中哪些像素是黑色的

像下面的东西…除了使其工作: public void seeBMPImage(String BMPFileName) throws IOException { BufferedImage image = ImageIO.read(getClass().getResource(BMPFileName)); int[][] array2D = new int[66][66]; for (int xPixel = 0; xPixel < array2D.length; xPixel++) { for (int yPixel = 0; yPixel > 23) == 1) { array2D[xPixel][yPixel] = 1; } else { array2D[xPixel][yPixel] = 1; } } } }