V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
banker
V2EX  ›  程序员

Java 可以像 C 一样 readline 么?

  •  
  •   banker · May 10, 2017 via iPhone · 4043 views
    This topic created in 3277 days ago, the information mentioned may be changed or developed.
    就是不做加工的把文件内容按换行符读到 byte 数组里
    randomaccessfile readline 再 getbytes(iso8859-1)这种存在乱码时可以还原么?
    还有没有更高效的方法?
    14 replies    2017-05-11 09:18:30 +08:00
    armstrong
        1
    armstrong  
       May 10, 2017
    可以试试 Guava,Files.readLine() 或者 readLines()
    mosliu
        2
    mosliu  
       May 10, 2017
    (new BufferedReader(new InputStreamReader(new FileInputStream("path"),"utf-8"))).readLine()
    kiwi95
        3
    kiwi95  
       May 10, 2017
    scanner
    mosliu
        4
    mosliu  
       May 10, 2017
    或者直接
    Files.readAllLines("path")
    后面接 lambda 很方便
    banker
        5
    banker  
    OP
       May 10, 2017 via iPhone
    @mosliu 这个对文件中的乱码没法还原
    mosliu
        6
    mosliu  
       May 10, 2017
    锟斤拷乱码?

    读的时候直接按照编码读不就好了?
    SoloCompany
        7
    SoloCompany  
       May 10, 2017
    @mosliu 大部分的编码方式的编码空间都是不可还原的(意思是说 decode 为 string 后再 encode 无法保证得到原始的 byte 序列),包括我们最常见的 utf8 以及 gb18030,如果你希望可 100% 还原,那么可以选择 Files.readAllLines(Path, ISO_8859_1), 然后每行都要先使用 ISO_8859_1 重新 encode 回 bytes 再强制编码转换
    ihuotui
        8
    ihuotui  
       May 10, 2017 via iPhone
    要高效率用 nio
    Arthur2e5
        9
    Arthur2e5  
       May 10, 2017
    唔我问个白痴问题:在各种 UTF-16 和 UTF-32 存在的情况下,是如何做到在阅读未知编码的文件下考虑换行符的?(逃)
    lululau
        10
    lululau  
       May 10, 2017
    Files#lines
    acidsweet
        11
    acidsweet  
       May 10, 2017
    @kiwi95 Scanner+1
    mosliu
        12
    mosliu  
       May 10, 2017
    @SoloCompany 不是我问的。。。
    我明白 所以才说 锟斤拷 :D:D:D
    banker
        13
    banker  
    OP
       May 11, 2017
    看起来比较简单的做法就是 RandomAccessFile 的 readLine,再 getBytes("ISO8859-1")了,就是这个 readLine 是一个字节一个字节读的估计效率不会很高,如果要高效估计就要改写几个 io 库的几个类了
    @Arthur2e5 就我所知,换行符都是\n 或者\r\n
    @mosliu 文件编码有约定,但是有的文件中存在乱码,比如在 UTF-8 编码中出现 0x88 这种,按照 utf-8 读文件,再 getBytes("utf-8")得到的字节数组就和文件中存储的不一致了
    Ouyangan
        14
    Ouyangan  
       May 11, 2017
    common 的 fileUtil 试试
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1097 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 23:46 · PVG 07:46 · LAX 16:46 · JFK 19:46
    ♥ Do have faith in what you're doing.