java获取文本文件的行数以及JTextpane设定特定行的字体、颜色

一、java获取文本文件的行数

public int getRows(File file) {
    	LineNumberReader  lnr = null;
    	int num = 0;
    	try {
			lnr = new LineNumberReader(new FileReader(file));
			lnr.skip(Long.MAX_VALUE); 
			num = lnr.getLineNumber();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				lnr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    	return ++num;
    }

skip(Long.MAX_VALUE)     Parameters: n - The number of characters to skip

java.io.LineNumberReader类是java.io.BufferedReader类的扩展,它封装了处理行号的额外能力,例如下例中得到不以“#”开头的行号:

public void parseFile(String filePath) throws IOException {
		
		LineNumberReader in = new LineNumberReader(new FileReader(filePath));
		String line = "";
		while ((line = in.readLine()) != null) {
			if (line.startsWith("#")) {
				continue;
			} else {
				throw new IOException("第" + in.getLineNumber() + "行丢了#号");
			}
		}
		in.close();
	}

行号0的意味着我们还没开始读入。如果在一个程序中我们每次读入一行,并输出该行和它的行号,行号将从1开始。


二、JTextpane设定特定行的字体、颜色

下面的代码在一个JTextPane中显示了一个图标,三行文字,每行用不同的颜色和大小显示: 

import   javax.swing.*; 
import   java.awt.*; 
import   java.awt.event.*; 
import   javax.swing.text.*; 
import   java.io.*; 

public   class   Test   { 
    JFrame   frame; 
    JTextPane   textPane; 
    File   file; 
    Icon   image; 

    public   Test(){ 
        frame   =   new   JFrame( "JTextPane "); 
        textPane   =   new   JTextPane(); 
        file   =   new   File( "./classes/test/icon.gif "); 
        image   =   new   ImageIcon(file.getAbsoluteFile().toString()); 
    } 

    public   void   insert(String   str,   AttributeSet   attrSet)   { 
        Document   doc   =   textPane.getDocument(); 
        str   = "\n "   +   str   ; 
        try   { 
            doc.insertString(doc.getLength(),   str,   attrSet); 
        } 
        catch   (BadLocationException   e)   { 
            System.out.println( "BadLocationException:   "   +   e); 
        } 
    } 

    public   void   setDocs(String   str,Color   col,boolean   bold,int   fontSize)   { 
        SimpleAttributeSet   attrSet   =   new   SimpleAttributeSet(); 
        StyleConstants.setForeground(attrSet,   col); 
        //颜色 
        if(bold==true){ 
            StyleConstants.setBold(attrSet,   true); 
        }//字体类型 
        StyleConstants.setFontSize(attrSet,   fontSize); 
        //字体大小 
        insert(str,   attrSet); 
    } 

    public   void   gui()   { 
        textPane.insertIcon(image); 
        setDocs( "第一行的文字 ",Color.red,false,20); 
        setDocs( "第二行的文字 ",Color.BLACK,true,25); 
        setDocs( "第三行的文字 ",Color.BLUE,false,20); 
        frame.getContentPane().add(textPane,   BorderLayout.CENTER); 
        frame.addWindowListener(new   WindowAdapter()   { 
            public   void   windowClosing(WindowEvent   e)   { 
                System.exit(0); 
            }}); 
        frame.setSize(200,300); 
        frame.setVisible(true); 
    } 
    public   static   void   main(String[]   args)   { 
        Test   test   =   new   Test(); 
        test.gui(); 
    } 
}




你可能感兴趣的:(java获取文本文件的行数以及JTextpane设定特定行的字体、颜色)