Tag: bufferedreader

Java中的自动检测字符编码

似乎是一个相当受欢迎的问题,但我还没有找到解决方案; 也许是因为它有这么多口味。 虽然这是。 我正在尝试阅读一些逗号分隔文件(偶尔分隔符可能比逗号更独特,但逗号现在就足够了)。 这些文件应该在整个行业标准化,但最近我们已经看到了许多不同类型的字符集文件。我希望能够设置一个BufferedReader来弥补这一点。 这样做的标准方法是什么,并检测它是否成功? 我对这种方法的第一个想法是循环遍历字符集simple-> complex,直到我可以无exception地读取文件。 虽然不完全理想…… 感谢您的关注。

Java:从具有缓冲输入的随机访问文件中读取字符串

我之前从未接触过Java IO API的经验,现在我真的很沮丧。 我发现很难相信它有多奇怪和复杂,做一个简单的任务有多难。 我的任务:我有2个位置(起始字节,结束字节), pos1和pos2 。 我需要读取这两个字节之间的行(包括起始字节,不包括结尾字节),并将它们用作UTF8字符串对象。 例如,在大多数脚本语言中,它将是一个非常简单的1-2-3-liner(在Ruby中,但对于Python,Perl等基本相同): f = File.open(“file.txt”).seek(pos1) while f.pos < pos2 { s = f.readline # do something with "s" here } Java IO API很快就会出现问题;)实际上,我看到了两种从常规本地文件中读取行(以\n结尾)的方法: RandomAccessFile有getFilePointer()和seek(long pos) ,但它的readLine()读取非UTF8字符串(甚至不是字节数组),但编码破坏的字符串非常奇怪,并且没有缓冲(这可能意味着每次read*()调用将被翻译成单个不正确的OS read() =>相当慢)。 BufferedReader有很好的readLine()方法,它甚至可以用skip(long n)进行一些搜索,但它无法确定已经读取的偶数字节数,也没有提到文件中的当前位置。 我试过用类似的东西: FileInputStream fis = new FileInputStream(fileName); FileChannel fc = fis.getChannel(); BufferedReader br = new BufferedReader( new InputStreamReader( fis, […]

Socket,BufferedReader挂起在readLine()

我有一台服务器,最初这样做: – BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); for (;;) { String cmdLine = br.readLine(); if (cmdLine == null || cmdLine.length() == 0) break; … } 稍后它将套接字传递给另一个类“foo”此类等待特定于应用程序的消息。 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); appCmd=br.readLine(); 我的客户端发送以下序列: “谷仓” “你好吗?\ n” “\ n” “将它传递给foo \ n” “\ n” 问题是有时“foo”没有得到它的回应。 它挂在readLine() 。 服务器中的readLine()使用提前读取缓存数据的可能性是多少,“foo”类正在变得饥饿? 如果我在客户端添加睡眠,它可以工作。 但它永远有效的可能性是多少? “谷仓” “你好吗?\ n” “\ […]

在Java中逐行读取和写入大文件的最快方法

我一直在寻找最快的方法来读取和写入具有有限内存(约64MB)的Java中的大文件(0.5 – 1 GB)。 文件中的每一行代表一条记录,所以我需要逐行获取它们。 该文件是普通文本文件。 我尝试过BufferedReader和BufferedWriter,但它似乎不是最好的选择。 读取和写入大小为0.5 GB的文件大约需要35秒,只读取写入而不进行处理。 我认为这里的瓶颈是写作,因为单独阅读大约需要10秒钟。 我试图读取字节数组,但是在每个读取的数组中搜索行需要更多时间。 有什么建议吗? 谢谢

在java中读取我的文件时,BufferedReader正在跳过所有其他行

所以我正在阅读一个包含我在我的代码中早先写过的约会的文件。 我想筛选文本文件并在某个日期查找约会并将它们添加到ArrayList中,但是当BufferedReader通过它时,它会跳过其他行…inheritance我的代码 public ArrayList read(int checkDay, int checkMonth, int checkYear) { ArrayList events = new ArrayList(); BufferedReader in = null; String read; try { in = new BufferedReader(new FileReader(“calendar.txt”)); while ((read = in.readLine()) != null) { read = in.readLine(); String[] split = read.split(“,”); System.out.println(read); if (split[1].equals(Integer.toString(checkDay)) && split[2].equals(Integer.toString(checkMonth)) && split[3].equals(Integer.toString(checkYear))) { events.add(split[0] + ” : […]

输入流读取器 – 读取方法返回错误的值

这可能听起来很容易或者是一个古老的愚蠢问题,但对我来说却完全不同。 我已经为半降金字塔模式编写了一个程序,就像这样。 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 我知道这很容易,诀窍是我不想通过使用Scanner和Integer.parseInt()做到这一点。 我试图用BufferedReader和InputStreamReader做到这一点。 所以当我执行以下代码的main方法时输入为5的num。 当我打印它时,它读为53。 我不知道为什么会这样。 但是当我使用’Integer.parseInt(br.readLine())’方法时,它会给出准确的输出。 当read方法应该读取int值时,它应该如何发生。 请清除它。 int num1; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println(“Enter hte value of num1”); //num1=Integer.parseInt(br.readLine()); num1=br.read(); System.out.println(num1); for(int i=0;i<num1;i++) { for(int j=0;j<=i;j++) { System.out.print(j+"\t"); } System.out.println(); } 这是我的第一个问题所以请忽略这些愚蠢的错误,我试着尽可能地写出来。 谢谢..

为什么默认的char缓冲区大小为BufferedReader 8192?

当我构造一个新的BufferedReader它为我提供了8192个字符的缓冲区。 这背后的逻辑/原因是什么? 8192 = 2 to the power of 13

Java:如何读取文本文件的每一行并将每一行设置为数组元素?

我试图阅读文本文件的每一行中列出的问题,然后将每一行添加到数组中,以便稍后可以单独调用它们。 我几乎肯定可以用Java做,但我不确定如何做到这一点。 我确实弄清楚如何读取整个文本文件并将其全部设置为字符串: private static String readFile(String pathname) { String line = null; try { BufferedReader reader = new BufferedReader(new FileReader(pathname)); while((line = reader.readLine()) != null){ System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } return line; } 虽然它与此没有太大关系,但正如我所提到的,这是一个存在问题的文件。 如果我得到这个问题的解决方案,我将有另一个文件来解答问题的所有答案,然后我会为该文件做同样的事情。 有谁知道一个不太复杂的方法来做到这一点? 如果它必须复杂,那么告诉我。 我想要某种类型的示例,而不仅仅是指向不同站点的链接。 我不是说我只会接受这个。 感谢您的时间! PS我已经阅读了关于这个主题的其他问题,但找不到合适的答案和/或我想用Java做的例子。

关闭BufferedReader和InputStreamReader

这段代码正在创建BufferedReader和InputStreamReader导致的内存泄漏问题,我认为可能会发生一些exception。 我该怎么改变它? try{ URL url = new URL(sMyUrl); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); while ((str = in.readLine()) != null) { jsonString += str; } in.close(); }catch(Exception e){ }

如何找出用于分割线的BufferedReader#readLine()哪个行分隔符?

我正在通过BufferedReader读取文件 String filename = … br = new BufferedReader( new FileInputStream(filename)); while (true) { String s = br.readLine(); if (s == null) break; … } 我需要知道线条是否以’\ n’或’\ r \ n’分隔是否有我能找到的方法? 我不想打开FileInputStream以便最初扫描它。 理想情况下,我想询问BufferedReader,因为它必须知道。 我很高兴覆盖BufferedReader来破解它,但我真的不想打开文件流两次。 谢谢, 注意:当前行分隔符(由System.getProperty(“line.separator”)返回)无法使用,因为该文件可能已由另一个应用程序在另一个操作系统上写入。