我程序中用log.debug(msg);
msg里有用"\n"换行的字符串内容,为什么在windows上用记事本打开没有换行呢?另log4j在windows上运行为什么产生的文件格式是unix的呢?

解决方案 »

  1.   

    你可以做个测试,看看究竟那个文件的HelloWorld会换行import java.io.*;
    import javax.swing.*;
    public class TestNotepad {
        public static void main(String[] args) throws IOException {
    stringToFile("Hello\nWorld");
    stringToFile("Hello\r\nWorld");

    ;
        }
        
        public static void stringToFile(String sourceString) {
    PrintWriter pw = null;
    try {
        JFileChooser jFileChooser = new JFileChooser();
        javax.swing.filechooser.FileFilter fileFilter = new javax.swing.filechooser.FileFilter() {
    public boolean accept(File file) {
        if (file.isDirectory())
    return true;
        String fileName = file.getName();
        if (fileName.toUpperCase().endsWith("TXT"))
    return true;
        return false;
    } public String getDescription() {
        return "保存为文本文件";
    }
        };// 建立一个过滤文件类型的过滤器(对话框中正确显示文件),是否启用过滤器决定于下面两句话
        // jFileChooser.addChoosableFileFilter(fileFilter);
        // jFileChooser.setFileFilter(fileFilter);
        int returnValue = jFileChooser.showSaveDialog(null);
        File fileOfSave = null;// 保存文件句柄
        if (returnValue == javax.swing.JFileChooser.APPROVE_OPTION) {
    fileOfSave = jFileChooser.getSelectedFile();// 获得文件句柄,文件是否存在还未知
        }
        if(fileOfSave == null) return;
        String fileNameOfSave = fileOfSave.getName();// 返回输入的文件名
        // 检查文件名是否符合要求,这一步暂时省略......................................
        if (fileOfSave.exists() && !isAgree("该文件已经存在,确定要覆盖吗?"))
    return;
        else
    fileOfSave.createNewFile();
        pw = new PrintWriter(fileOfSave);
        pw.print(sourceString);
        pw.flush();
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (pw != null)
    pw.close();
    }
        }
        
        
        public static boolean isAgree(String hint) {
    int returnValue = javax.swing.JOptionPane.showConfirmDialog(null, hint);
    if (returnValue == javax.swing.JOptionPane.YES_OPTION)
        return true;
    else
        return false;
        }    public static int prompt(String promptMessage) {
    return JOptionPane.showConfirmDialog(null, promptMessage, "友情提示",
    JOptionPane.WARNING_MESSAGE);
        }    
    } /* (Execute to see output) */// :~
      

  2.   

    不能用\r\n吧?windows上直接用\n也会换行的啊,在控制台上显示就没问题啊
      

  3.   

    控制台是可以的,但是记事本就是不行,我的2楼给你测试程序了,
    你将"Hello\nWorld"写入1.txt时,它只会黑点
    然而,
    你将"Hello\r\nWorld"写入2.txt时,它会换行如果你要存入记事本的东西oldString只有\n没有\r\n,你却想\n换行,
    做法很简单,只需要newString = oldString.replace("\\n","\r\n");
      

  4.   

     在JAVA程序中向文件写入内容,使用一般的编辑器时当需要换行时通常会使用换行符或回车符---'\n'、'\r',但它们在记事本文件中会显示成‘■’,根本起不到换行的作用。这是编码问题,记事本的换行符号是"\r\n"。如果有跨平台使用的要求,可以使用 String str= System.getProperty("line.separator"); 来获取换行符。 linux使用 \n windows使用\r\n 其它操作系统可能也不同。
      

  5.   

    关键是程序要运行的不同的平台上,放在linux上就不是这样了。\n应该是通用的啊,为什么在windows上写入记事本就不一样了呢?控制台为什么就可以呢?
      

  6.   

    如果有跨平台使用的要求,可以使用 String str= System.getProperty("line.separator"); 来获取换行符。 linux使用 \n windows使用\r\n 其它操作系统可能也不同。
      

  7.   

    用System.getProperty("line.separator")