Tag: file io

Java阅读第n行

我试图从文本文件中读取一个特定的行,但是我不想将文件加载到内存中(它可能变得非常大)。 我一直在寻找,但我发现的每个例子都要求读取每一行(这将减慢我的代码,因为有超过100,000行)或将整个事物加载到一个数组并获得正确的元素(文件将有很多行输入)。 我想做的一个例子: String line = File.getLine(5); “代码不是实际代码,它是为了显示我想要的原则” 有没有办法做到这一点? – – -编辑 – – – 我刚刚意识到这个文件也会在读取行之间写入(添加到文件末尾)。

迭代器用Java读取和处理文件

假设我有一个Point类和一个处理Point实例的函数 class Point {private final int x,y; …} … void handlePoints(Iterable points){for(Point p:points){…}} 现在我想从文件中读取points 。 该文件的每一行包含两个数字,因此我有一个函数(“工厂方法”)来从一行创建一个point 。 点makePoint(String line){…} 我现在应该怎么做? 我可以编写一个函数来将文件读取到一个points列表并调用handlePoints函数。 List readPoints(BufferedReader reader){…} //在这里使用makePoint void handlePoints(BufferedReader reader){ List points = readPoints(reader); handlePoints(分); } 不幸的是,这个function似乎并不特别优雅,因为它在内存中创建了一个不必要的点列表。 使用迭代器不是更好吗? void handlePoints(Iterator points){…} Iterator readPoints(BufferedReader reader){…} //在这里使用makePoint void handlePoints(BufferedReader reader){ Iterator points = readPoints(reader); handlePoints(分); } 是否有意义? 这段代码在Java中不会太“吵”吗?

在文本文件中写入“\ n”

我正在尝试在文本文件中写一个字符串\ n。 但是文本文件中的结果是换行符。 我知道\ n代表换行符。 但在我的情况下,我真的需要看到String \ n,而不是换行符。 我怎么解决这个问题?

FileOutputStream进入FileInputStream

将FileOutputStream转换为FileInputStream的最简单方法是什么(一段代码会很棒)?

使用FileChannel和ByteArrays读取ASCII文件

我有以下代码: String inputFile = “somefile.txt”; FileInputStream in = new FileInputStream(inputFile); FileChannel ch = in.getChannel(); ByteBuffer buf = ByteBuffer.allocateDirect(BUFSIZE); // BUFSIZE = 256 /* read the file into a buffer, 256 bytes at a time */ int rd; while ( (rd = ch.read( buf )) != -1 ) { buf.rewind(); for ( int i = 0; […]

在Java中,当该文件被其他线程锁定时,有没有办法读取文件?

所以我使用以下命令在文件上创建一个锁,以便我可以独占编辑它: File file = new File(filename); channel = new RandomAccessFile(file, “rw”).getChannel(); lock = channel.tryLock(); 现在我有第二个线程想要访问同一个文件 – 只是为了阅读,而不是编辑。 我怎么做? 现在第二个线程将抛出一个ioexception并通知我该文件已被锁定。 这可行吗? 有什么建议么? 谢谢

File.listFiles返回null时检索基础错误

根据File.listFiles的方法javadoc 如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。 我知道我正在使用一个目录,但是收到了一个null结果,因此必须出现I / O错误。 我对这个错误非常感兴趣。 当返回这样的null结果时,如何检索错误消息/代码?

Groovy:从文件中读取一系列行

我有一个文本文件,其中包含大量2,000,000行的大量数据。 使用以下代码片段浏览文件很简单,但这不是我需要的;-) def f = new File(“input.txt”) f.eachLine() { // Some code here } 我只需要从文件中读取特定范围的行。 有没有办法像这样指定起始和结束行(伪代码)? 在选择范围之前,我想避免使用readLines()将所有行加载到内存中。 // Read all lines from 4 to 48 def f = new File(“input.txt”) def start = 4 def end = 48 f.eachLine(start, end) { // Some code here } 如果Groovy无法做到这一点,那么欢迎任何Java解决方案:-) 干杯,罗伯特

下载的txt文件变得萎缩

我正在尝试用我的servlet编写一个txt文件并将其发送到我的桌面应用程序。 桌面应用程序将文件保存在本地磁盘上。 下载大二进制文件没有问题,但是txt文件是小错过最终字符。 例如,servlet发送长度为523KB的txt文件,但是当我将它保存在桌面应用程序上时,文件长度是496KB? 这是servlet代码: final int BUFFER_SIZE = 4096; FileInputStream in = new FileInputStream(file); OutputStream out = response.getOutputStream(); byte buffer[] = new byte[BUFFER_SIZE]; for (int nread = 0; (nread = in.read(buffer)) != -1;) { out.write(buffer, 0, nread); } out.flush(); out.close(); in.close(); 这是桌面应用程序代码(我使用HttpClient 4): response = httpclient.execute(httppost); resEntity = response.getEntity(); InputStream in = resEntity.getContent(); in […]

如何处理823237个字符的字符串

我有一个字符串,其中包含823237个字符。 它实际上是一个xml文件,出于测试目的,我希望作为servlet的响应返回。 我已经尝试了所有我能想到的东西 1)用整个字符串创建一个常量…在这种情况下Eclipse抱怨(在servlet类名下有一个红线) – The type generates a string that requires more than 65535 bytes to encode in Utf8 format in the constant pool 2)将整个字符串分成20个字符串常量并直接写入out对象: out.println( CONSTANT_STRING_PART_1 + CONSTANT_STRING_PART_2 + CONSTANT_STRING_PART_3 + CONSTANT_STRING_PART_4 + CONSTANT_STRING_PART_5 + CONSTANT_STRING_PART_6 + // add all the string constants till …. CONSTANT_STRING_PART_20); 在这种情况下…构建失败..抱怨.. [javac] D:\xx\xxx\xxx.java:87: constant string too long […]