简体   繁体   中英

Avoid extra new line, writing on .txt file

Currently I am using java.nio.file.File.write(Path, Iterable, Charset) to write txt file. Code is here...

    Path filePath = Paths.get("d:\\myFile.txt");
    List<String> lineList =Arrays.asList("1. Hello", "2. I am Fine", "3. What about U ?");
    Files.write(filePath, lineList, Charset.forName("UTF-8"));

在此处输入图片说明

But one more (4th) empty line generated in the text file. How can I avoid 4th empty line ?

1 | 1. Hello
2 | 2. I am Fine
3 | 3. What about U ?
4 |

Check Files.write the code you call:

public static Path write(Path path, Iterable<? extends CharSequence> lines,
                             Charset cs, OpenOption... options)
        throws IOException
    {
        // ensure lines is not null before opening file
        Objects.requireNonNull(lines);
        CharsetEncoder encoder = cs.newEncoder();
        OutputStream out = newOutputStream(path, options);
        try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, encoder))) {
            for (CharSequence line: lines) {
                writer.append(line);
                writer.newLine(); 
            }
        }
        return path;
    }

It creates new line at the end of each insert:

writer.newLine(); 

The solution is: provide data as byte[] :

Path filePath = Paths.get("/Users/maxim/Appsflyer/projects/DEMOS/myFile.txt");
List<String> lineList =Arrays.asList("1. Hello", "2. I am Fine", "3. What about U ?");
String lineListStr = String.join("\n", lineList);
Files.write(filePath, lineListStr.getBytes(Charset.forName("UTF-8")));

From javadoc for write: "Each line is a char sequence and is written to the file in sequence with each line terminated by the platform's line separator , as defined by the system property line.separator."

Simplest way to do as you wish:

List<String> lineList =Arrays.asList("1. Hello", "2. I am Fine");
String lastLine = "3. What about U ?"; 
Files.write(filePath, lineList, Charset.forName("UTF-8"));
Files.write(filePath, lastLine.getBytes("UTF-8"), StandardOpenOption.APPEND);

我会做

Files.writeString(filePath, String.join("\n",lineList), Charset.forName("UTF-8"));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM