JTextPane 内容的保存:图文格式保存的解决

一般而言,JTextPane的getText只能得到String,不能对文字的格式,和里面的图文进行保存

使用HTMLEditorKit可以保存文字的格式,在JTextPane中没有图片的时候,这种方式很方便和简单,核心代码可见writeHtml方法,从实现来说就是将JTextPane中的Document对象使用HTMLEditorKit的write写到文件中即可。


但对于复杂的JTextPane来说,图片及其他各种各样的格式非常常见,杀手锏只有一种方法就是序列化,关于这点的核心代码可以见saveAsObj和ReadFromObj方法,即写的时候直接使用ObjectOutputStream的writeObject方法就可以了,而读先从ObjectInputstream中readObject中读出对象,然后使用docTextPane.setStyledDocument(doc);Validae()即可在界面上展示出来。

 

     public void wirteHTML() {

		StyledDocument doc = (StyledDocument) docTextPane.getDocument();

		HTMLEditorKit kit = new HTMLEditorKit();

		BufferedOutputStream out;
		try {
			File writeF = new File("D://share/tesss_html");
			if (!writeF.exists()) {
			    writeF.createNewFile();
			}
			out = new BufferedOutputStream(new FileOutputStream(writeF));
			kit.write(out, doc, doc.getStartPosition().getOffset(),doc.getLength());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
	}



        public void saveAsObj() {

		try {
			File writeF = new File("D://share/tesss_obj");
			if (!writeF.exists()) {
				writeF.createNewFile();
			}
			StyledDocument doc = (StyledDocument) docTextPane.getDocument();
			FileOutputStream fos = new FileOutputStream("D://share/tesss_obj");
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(doc);
			oos.flush();
			oos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void readFromObj() {
		try {
			File writeF = new File("D://share/tesss_obj");
			if (!writeF.exists()) {
				return;
			}
			FileInputStream fis = new FileInputStream("D://share/tesss_obj");
			ObjectInputStream ois = new ObjectInputStream(fis);
			StyledDocument doc = (StyledDocument) ois.readObject();
			ois.close();
			docTextPane.setStyledDocument(doc);
			validate();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}





你可能感兴趣的:(Java)