Java读取文件涉及的换行符问题
首先需要把数据库中的多列导出成txt文本,然后java代码读取该文件,通过readline读取每一行,再通过"\t" 分割spit每一列数据,分别对其进行处理。
结果读取每一行的时候发现本来在一行的数据分成了两行,查找原因发现,原来是数据库列中的数据本身已存在换行符,这就需要在导出数据的时候对该列进行一个去除换行符的 *** 作。
REPLACE(title, "\r\n", "")
解决办法如下:
java \r\n 或者 \n
mysql,javascript \r\n
windows下的文本换行符是 \r\n
unix下的文本换行符是 \n
不同系统的换行符根本没法通用的。只能是自己根据系统定义下
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null;//定义一个流
pw = new OutputStreamWriter(new FileOutputStream(“D:/testdoc”),"GBK");//确认流的输出文件和编码格式,此过程创建了“testtxt”实例
pwwrite("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pwclose();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
答:因为调用的是setText()方法,该方法会覆盖掉之前的文字,显示最后一次设置的文字
如果是JTextArea组件, 会有append(String str)方法,可以追加文字
JTextArea jta= new JTextArea();jtasetText("123");//设置文字
jtaappend("字符串");//追加文字
如果是 JTextPane 组件, 那么可以通过先获取文字,然后再设置文字的方式,来实现
JTextPane textPane = new JTextPane();textPanesetText(textPanegetText()+"新字符串");
所以,你的代码需要修改成下面这样
btnNewButton_1addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
// 先读取之前的文字,然后追加上现在的文字
textPanesetText(textPanegetText()+j + "" + i + "=" + i j + "\t");
}
// 先读取之前的文字,然后追加上现在的文字
textPanesetText(textPanegetText()+"\n");
}
}
});
效果图
1: 如果你觉得不够美观, 你可以加宽你的窗口和JTextPane组件
2: 如果你觉得循环太多次 。都要setText() ,那么也可以使用字符串拼接好了,只设置一次就可以了。
3: JDK版本5以后已经优化了字符串的拼接速度。所以使用 + 链接字符串,或者使用StringBuffer然后append效果差不多。
4: 你的类名是action 是不推荐的, 因为类名推荐首字母大写,并且使用有意义的名词比较好,比如MyFrame等。
5: 代码从风格上来看,比较乱,应该是使用windowbuilder 自动生成的代码。 自己写,其实更简单,并且很整洁。
6: 这段代码采用的是绝对布局 setLayout(null); 这样的布局,在不同的 *** 作系统以及不同的运行环境下,显示的效果会有差别,并且也不能很好的缩放窗口,不推荐使用。
完整的参考代码和注释如下:
下面的代码纯手打, 一般的窗口都可以参考下面的写法书写
import javaawt;import javaxswing;
import javaawtevent;
//本类继承自JFrame实现了ActionListener接口
public class MyFrame extends JFrame implements ActionListener {
//获取当前系统的换行符。因为不同系统可能是\n \n\r 。。等多种情况
public static final String NEW_LINE = SystemgetProperty("lineseparator");
//文字面板
JTextPane jtp;
// 构造器
public MyFrame() {
//窗口中间的文字面板
jtp = new JTextPane();
add(jtp, BorderLayoutCENTER);// 把文本面板放到中间
//窗口南面的按钮面板
JPanel jps = new JPanel();
JButton jbShow = new JButton("计算");
jbShowaddActionListener(this);// 给按钮添加响应
JButton jbClose = new JButton("关闭");
jbCloseaddActionListener(this);// 给按钮添加响应
jpsadd(jbShow);
jpsadd(jbClose);
add(jps, BorderLayoutSOUTH);// 把按钮面板加入到窗口的南面
//窗口属性的设置
setTitle("乘法表");//窗口标题
setSize(680, 300);//窗口宽 高
setLocationRelativeTo(null);//窗口居中(屏幕中央)
setDefaultCloseOperation(EXIT_ON_CLOSE);//点击窗口右上角的按钮时结束程序
}
// ActionListener接口需要实现actionPerformed方法 。可以对多个按钮点击做出响应
@Override
public void actionPerformed(ActionEvent e) {
String cmd = egetActionCommand();// 按钮命令
if (cmdequals("关闭")) {// 如果是关闭按钮被点击
Systemexit(0);
} else if (cmdequals("计算")) {// 如果是计算按钮被点击
StringBuffer sb = new StringBuffer();//jdk5以后 的版本使用字符串的 +链接,效率也高
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
sbappend(j + "" + i + "=" + i j + "\t");
}
sbappend(NEW_LINE);
}
jtpsetText(sbtoString());
}
}
// main方法
public static void main(String[] args) {
EventQueueinvokeLater(new Runnable() {
public void run() {
try {
new MyFrame()setVisible(true);// 实例化窗口并可见
} catch (Exception e) {
eprintStackTrace();
}
}
});
}
}
特殊字符的表示方法::
1、\t 空格 ('\u0009')
2、\n 换行 ('\u000A')
3、\\ 反斜杠
4、\r 回车 ('\u000D')
5、\d 数字等价于[0-9]
6、\D 非数字等价于[^0-9]
7、\s 空白符号 [\t\n\x0B\f\r]
8、\S 非空白符号 [^\t\n\x0B\f\r]
9、\w 单独字符 [a-zA-Z_0-9]
10、\W 非单独字符 [^a-zA-Z_0-9]
11、\f 换页符
12、\e Escape
扩展资料:
Java
1、Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
2、Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
参考资料来源:百度百科-Java
以上就是关于有关Java 文件读取中换行的问题全部的内容,包括:有关Java 文件读取中换行的问题、java代码输入输出流写word,不同系统间换行符该怎么特殊处理、java JTextPane设置问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)