• 安东
    2019-11-26
    // TODO 创建一个inputstream,建立一个从文件到程序的byte数据传输流
    FileOutputStream fos = new FileOutputStream(targetFile);

    老师为什么FIleOutputsStream是inputstream呢?

    作者回复:
    应该是output stream,谢谢活捉bug一只

    https://github.com/deepnighttwo/LetsJava/blob/master/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20Java%20%E4%B8%AD%E7%9A%84%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E5%92%8C%E6%96%B0%E8%AF%AD%E6%B3%95/13.%20%E5%86%99%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E5%B0%8F%E7%A8%8B%E5%BA%8F/code/src/com/geekbang/learntowrite/WriteToFilesAppMain.java#L24-L26

    https://github.com/geektime-geekbang/LetsJava/pull/4

    
    
  • 稍后重试
    2019-09-20
    老师好,我关于这一节查了资料在深入了一下,有个问题比较困扰,麻烦解答一下,谢谢
    System.out其实就是PrintStream的一个对象,但是PrintStream类在构造的时候可以用类似这样的构造往文件输出PrintStream pu=new PrintStream(new FileOutputStream(new File("文件路径test.txt")));

    我不明白的在于为什么System.out.print就可以像显示器输出了?麻烦详细解答下,我觉得这个是不是跟ByteArrayOutputStream有关?
    展开

    作者回复:
    Stream只是数据管道,具体数据到哪里要看数据最终操作的什么。比如FileOutputStream就是操作文件的。

    为什么sout可以输出到控制台,可以看看System类里是怎么给out赋值的。

     2
    
  • 小鹏
    2019-07-27
    老师好,我想问一下,把下面三行:
    FileOutputStream fos = new FileOutputStream(targetFile);
    OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
    PrintWriter pw = new PrintWriter(osw);

    换成下面两行:
    FileWriter fw = new FileWriter(targetFile);
    PrintWriter pw = new PrintWriter(fw);

    这样改动后,有没有什么区别?我运行起来后都是一样的效果。

    //新的代码如下
    import java.io.*;
    import java.util.Scanner;

    public class WriteToFilesAppMain {

        private static final Scanner in = new Scanner(System.in);

        public static void main(String[] args) throws IOException {

            File targetFile = createFile();

            writeToFile(targetFile);

            System.out.println("程序执行结束");

        }

        private static void writeToFile(File targetFile) throws IOException {
            try (
                    FileWriter fw = new FileWriter(targetFile);
                    PrintWriter pw = new PrintWriter(fw);
            ) {
                System.out.println("输入的内容会实时写入文件,如果输入空行则结束");
                while (true) {
                    String lineToWrite = in.nextLine().trim();
                    System.out.println("输入内容为" + lineToWrite);
                    if (lineToWrite.trim().isEmpty()) {
                        System.out.println("输入结束");
                        break;
                    } else {
                        pw.println(lineToWrite);
                        pw.flush();
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        private static File createFile() throws IOException {
            System.out.println("请输入文件名:");
            String fileName = in.nextLine().trim();
            File f = new File("." + File.separator + fileName + ".txt");
            if (f.isFile()) {
                System.out.println("目标文件存在,删除:" + f.delete());
            }
            System.out.println(f.createNewFile());
            return f;
        }

    }
    展开

    作者回复: 没有指定Charset,系统会使用默认的charset。中文的Windows上一般会是GBK。在系统默认charset都是GBK的系统上没问题,如果系统的Charset不是GBK,就可能会有乱码。

    
    
我们在线,来聊聊吧