Чтение содержимого файла CSS с использованием Java - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь прочитать файл CSS, выяснить классы CSS и их определения, а затем сохранить его в файле CSV с его именем класса и описанием. Используя Java, у меня есть файл css, common.css.

/* CSS Document */

.Page
{
    background-color: #F4EEE0;
    background-image: none;
    margin: 0px 0px 0px 0px;
    scrollbar-face-color: #DEAC64; 
    scrollbar-highlight-color: #FFFFFF; 
    scrollbar-shadow-color: #805822; 
    scrollbar-3dlight-color: #B47F36; 
    scrollbar-arrow-color: #805822; 
    scrollbar-darkshadow-color: #7188AA; 
    scrollbar-base-color: #F4EEE0; 
    scrollbar-track-color: #E8C490; 

}
a.PageLinkTrail 
{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    font-style: normal;
    font-weight: bold;
    color: #805822;
    text-decoration:none;
}

a.PageLinkTrail:hover
{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    font-style: normal;
    font-weight: bold;
    color: #805822;
    text-decoration:underline;
}
.IconSpacing a:hover
{
    padding: 3px 3px 3px 3px;
    text-align:center;
    width:15px;
    height:15px;
    border-top: 1px solid #FFFFFF;
    border-right: 1px solid #C99349;
    border-bottom: 1px solid #C99349;
    border-left: 1px solid #FFFFFF;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    font-style: normal;
    font-weight: normal;
    color: #333333;
    text-decoration:normal;
    vertical-align:Top;
    white-space:nowrap;
    cursor:hand;
}

Я хочу имя класса

.Page
a.PageLinkTrail 
a.PageLinkTrail:hover

Вот его определение.

{
    background-color: #F4EEE0;
    background-image: none;
    margin: 0px 0px 0px 0px;
    scrollbar-face-color: #DEAC64; 
    scrollbar-highlight-color: #FFFFFF; 
    scrollbar-shadow-color: #805822; 
    scrollbar-3dlight-color: #B47F36; 
    scrollbar-arrow-color: #805822; 
    scrollbar-darkshadow-color: #7188AA; 
    scrollbar-base-color: #F4EEE0; 
    scrollbar-track-color: #E8C490; 

}
{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    font-style: normal;
    font-weight: bold;
    color: #805822;
    text-decoration:none;
}

{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 11px;
    font-style: normal;
    font-weight: bold;
    color: #805822;
    text-decoration:underline;
}

Я хочу сохранить его в CSV-файле. Как я должен использовать Java, чтобы получить контент CSS, такой как имя и определение? Это та часть решения, которую у меня сейчас больше всего не получается. Я написал текущий код

package com.tufan.digite.Count;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 public class GetAllCssFiles {
public static void main(String args[]) throws IOException {
    try {       
        FileInputStream fstream = new FileInputStream("D:/digite/work/digite/WEBUI/common/theme1/common.css");

        DataInputStream dis = new DataInputStream(fstream);
        FileChannel fc = fstream.getChannel();
        ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0,(int) fc.size());
        Charset cs = Charset.forName("8859_1");
        CharsetDecoder cd = cs.newDecoder();
        CharBuffer cb = cd.decode(bb);          
        String strLine;                     
        String content = ".MainNav a:hover{ float:left; width:70px; height:65px; border-top: 2px Solid #F4E6CC; border-bottom: 2px Solid #805822; border-left: 2px Solid #F4E6CC; border-right: 2px Solid #805822; margin: 0px 0px 0px 0px; align:center; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; color: #FFFFFF; text-decoration: none; text-align: center; background:#C99349; background-image: url(../../images/hor_nav_bg.gif); background-repeat: repeat-X; padding:4px; clear:left; }";
        Pattern p = Pattern.compile("([a-zA-Z_0-9 | -|:|;|\n\t]*)(\\{[\n\t]*[a-zA-Z_0-9 | -|:|;|\n\t]*\\})");
        Matcher matcher = p.matcher(cb);
        while (matcher.find()) {
            String selector = matcher.group(1);
            String definition = matcher.group(2);
            System.out.println("selector:" + selector + "Definition"
                    + definition);
        }

    } catch (Exception e) {
        e.printStackTrace();
    } }}

это не даст мне групповые значения. если я передам content Matcher, я получу ответ ".MainNav a: hover" в первой группе и { плыть налево; ширина: 70px; высота: 65px; border-top: 2px Solid # F4E6CC; Граница внизу: 2px Solid # 805822; Граница слева: 2px Solid # F4E6CC; Граница справа: 2px Solid # 805822; поле: 0px 0px 0px 0px; выровняйте: центр; семейство шрифтов: Verdana, Arial, Helvetica, без засечек; размер шрифта: 10 пикселей; вес шрифта: полужирный; цвет: #FFFFFF; текстовое оформление: нет; выравнивание текста: по центру; фон: # C99349; background-image: url (../../ images / hor_nav_bg.gif); background-repeat: repeat-X; обивка: 4px; ясно: левый; } как определение как группа2

но этот контент является жестким кодом. я пытаюсь cb cb content содержимое всего css файла.

1 Ответ

1 голос
/ 20 января 2012

Найти позицию первой открывающей фигурной скобки, найти позицию первой закрывающей фигурной скобки, получить текст от начальной до открывающей фигурной скобки, получить текст от начальной фигурной скобки до закрывающей фигурной скобки, повторять текст после закрывающей фигурной скобки, пока не останется больше текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...