作業部屋の使い方を試しています。
(empty log message)
| @@ -1,120 +0,0 @@ | ||
| 1 | -/* | |
| 2 | - * To change this license header, choose License Headers in Project Properties. | |
| 3 | - * To change this template file, choose Tools | Templates | |
| 4 | - * and open the template in the editor. | |
| 5 | - */ | |
| 6 | - | |
| 7 | -package test1; | |
| 8 | - | |
| 9 | -import java.io.BufferedReader; | |
| 10 | -import java.io.BufferedWriter; | |
| 11 | -import java.io.File; | |
| 12 | -import java.io.FileInputStream; | |
| 13 | -import java.io.FileOutputStream; | |
| 14 | -import java.io.IOException; | |
| 15 | -import java.io.InputStreamReader; | |
| 16 | -import java.io.OutputStreamWriter; | |
| 17 | -import java.util.ArrayList; | |
| 18 | - | |
| 19 | -/** | |
| 20 | - * | |
| 21 | - * @author kgto | |
| 22 | - */ | |
| 23 | -public class serachDataIO { | |
| 24 | - | |
| 25 | - private final String splitchar = "\t"; | |
| 26 | - | |
| 27 | - private String UrlAdress; | |
| 28 | - private ArrayList slist; | |
| 29 | - | |
| 30 | - public void seturl(String UrlAdress) { | |
| 31 | - this.UrlAdress = UrlAdress; | |
| 32 | - } | |
| 33 | - | |
| 34 | - public void setslist(ArrayList slist) { | |
| 35 | - this.slist = slist; | |
| 36 | - } | |
| 37 | - | |
| 38 | - public String geturl() { | |
| 39 | - return UrlAdress; | |
| 40 | - } | |
| 41 | - | |
| 42 | - public ArrayList getslist() { | |
| 43 | - return slist; | |
| 44 | - } | |
| 45 | - | |
| 46 | - /** | |
| 47 | - * 保存 | |
| 48 | - * @param file | |
| 49 | - */ | |
| 50 | - public void save(File file) { | |
| 51 | - | |
| 52 | - try { | |
| 53 | - //空のファイルを作成 | |
| 54 | - file.createNewFile(); | |
| 55 | - | |
| 56 | - FileOutputStream fileoutputstream = new FileOutputStream(file); | |
| 57 | - OutputStreamWriter outputstreamwriter = new OutputStreamWriter(fileoutputstream, "UTF-8"); | |
| 58 | - BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter); | |
| 59 | - | |
| 60 | - // URL | |
| 61 | - bufferedwriter.write(UrlAdress); | |
| 62 | - bufferedwriter.write("\n"); | |
| 63 | - // 検索情報 | |
| 64 | - for (Object slist1 : slist) { | |
| 65 | - serachData sdat = (serachData) slist1; | |
| 66 | - StringBuilder str = new StringBuilder(); | |
| 67 | - str.append(sdat.getitem()).append(splitchar); | |
| 68 | - str.append(sdat.getHtmltag()).append(splitchar); | |
| 69 | - str.append(sdat.getHtmlid()).append(splitchar); | |
| 70 | - str.append(sdat.getHtmlclass()).append(splitchar); | |
| 71 | - str.append(sdat.getaround()).append(splitchar); | |
| 72 | - str.append(sdat.getregexp()).append("\n"); | |
| 73 | - | |
| 74 | - bufferedwriter.write(str.toString()); | |
| 75 | - } | |
| 76 | - bufferedwriter.close(); | |
| 77 | - | |
| 78 | - } catch(IOException e) { | |
| 79 | - System.out.println(e); | |
| 80 | - } | |
| 81 | - } | |
| 82 | - | |
| 83 | - /** | |
| 84 | - * 読込 | |
| 85 | - * @param file | |
| 86 | - */ | |
| 87 | - public void load(File file) { | |
| 88 | - slist = new ArrayList(); | |
| 89 | - | |
| 90 | - try { | |
| 91 | - FileInputStream fileinputstream = new FileInputStream(file); | |
| 92 | - InputStreamReader inputstreamreader = new InputStreamReader(fileinputstream, "UTF-8"); | |
| 93 | - BufferedReader bufferedreader = new BufferedReader(inputstreamreader); | |
| 94 | - | |
| 95 | - String rec; | |
| 96 | - | |
| 97 | - // URL | |
| 98 | - UrlAdress = bufferedreader.readLine(); | |
| 99 | - // 検索情報 | |
| 100 | - while((rec = bufferedreader.readLine()) != null) { | |
| 101 | - String[] recary = rec.split(splitchar, -1); | |
| 102 | - serachData sdat = new serachData(); | |
| 103 | - sdat.setitem(recary[0]); | |
| 104 | - sdat.setHtmltag(recary[1]); | |
| 105 | - sdat.setHtmlid(recary[2]); | |
| 106 | - sdat.setHtmlclass(recary[3]); | |
| 107 | - sdat.setaround(recary[4]); | |
| 108 | - sdat.setregexp(recary[5]); | |
| 109 | - | |
| 110 | - slist.add(sdat); | |
| 111 | - } | |
| 112 | - bufferedreader.close(); | |
| 113 | - | |
| 114 | - } catch(IOException e) { | |
| 115 | - System.out.println(e); | |
| 116 | - } | |
| 117 | - | |
| 118 | - } | |
| 119 | - | |
| 120 | -} |
| @@ -1,359 +0,0 @@ | ||
| 1 | -/* | |
| 2 | - * To change this license header, choose License Headers in Project Properties. | |
| 3 | - * To change this template file, choose Tools | Templates | |
| 4 | - * and open the template in the editor. | |
| 5 | - */ | |
| 6 | - | |
| 7 | -package test1; | |
| 8 | - | |
| 9 | -import java.io.File; | |
| 10 | -import java.util.*; | |
| 11 | -import javax.swing.JFileChooser; | |
| 12 | -import javax.swing.filechooser.FileNameExtensionFilter; | |
| 13 | -import org.jdesktop.observablecollections.ObservableCollections; | |
| 14 | - | |
| 15 | -/** | |
| 16 | - * HTMLページ上の特定の項目を検索し、その項目内容の値を取得する。 | |
| 17 | - * @author kgto | |
| 18 | - */ | |
| 19 | -public class Frame1 extends javax.swing.JFrame { | |
| 20 | - | |
| 21 | - private ArrayList slist = new ArrayList(); | |
| 22 | - private List serachDataList = ObservableCollections.observableList(slist); | |
| 23 | - private serachDataIO sio = new serachDataIO(); | |
| 24 | - | |
| 25 | - /** | |
| 26 | - * Creates new form Frame1 | |
| 27 | - */ | |
| 28 | - public Frame1() { | |
| 29 | - initComponents(); | |
| 30 | - } | |
| 31 | - | |
| 32 | - public List getSerachDataList() { | |
| 33 | - return this.serachDataList; | |
| 34 | - } | |
| 35 | - | |
| 36 | - public void setSerachDataList(List serachDataList) { | |
| 37 | - this.serachDataList = serachDataList; | |
| 38 | - } | |
| 39 | - | |
| 40 | - /** | |
| 41 | - * This method is called from within the constructor to initialize the form. | |
| 42 | - * WARNING: Do NOT modify this code. The content of this method is always | |
| 43 | - * regenerated by the Form Editor. | |
| 44 | - */ | |
| 45 | - @SuppressWarnings("unchecked") | |
| 46 | - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents | |
| 47 | - private void initComponents() { | |
| 48 | - bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); | |
| 49 | - | |
| 50 | - jFileChooser1 = new javax.swing.JFileChooser(); | |
| 51 | - jLabel1 = new javax.swing.JLabel(); | |
| 52 | - jTxtUrl = new javax.swing.JTextField(); | |
| 53 | - jBtnSearch = new javax.swing.JButton(); | |
| 54 | - jPanel1 = new javax.swing.JPanel(); | |
| 55 | - jScrollPane1 = new javax.swing.JScrollPane(); | |
| 56 | - jTable1 = new javax.swing.JTable(); | |
| 57 | - jBtnRowIns = new javax.swing.JButton(); | |
| 58 | - jBtnRowDel = new javax.swing.JButton(); | |
| 59 | - jBtnRowCpy = new javax.swing.JButton(); | |
| 60 | - jPanel2 = new javax.swing.JPanel(); | |
| 61 | - jScrollPane2 = new javax.swing.JScrollPane(); | |
| 62 | - jTxtRtn = new javax.swing.JTextArea(); | |
| 63 | - jMenuBar1 = new javax.swing.JMenuBar(); | |
| 64 | - jMenu1 = new javax.swing.JMenu(); | |
| 65 | - jMenuLoad = new javax.swing.JMenuItem(); | |
| 66 | - jMenuSave = new javax.swing.JMenuItem(); | |
| 67 | - jMenu2 = new javax.swing.JMenu(); | |
| 68 | - | |
| 69 | - jFileChooser1.setCurrentDirectory(new java.io.File("C:\\zz_work\\java")); | |
| 70 | - jFileChooser1.setDialogTitle(""); | |
| 71 | - jFileChooser1.setFileFilter(new FileNameExtensionFilter("TEXTファイル", "txt")); | |
| 72 | - | |
| 73 | - setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); | |
| 74 | - setTitle("タグ検索"); | |
| 75 | - | |
| 76 | - jLabel1.setText(" URL:"); | |
| 77 | - | |
| 78 | - jBtnSearch.setText("検索"); | |
| 79 | - jBtnSearch.addActionListener(new java.awt.event.ActionListener() { | |
| 80 | - public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 81 | - jBtnSearchActionPerformed(evt); | |
| 82 | - } | |
| 83 | - }); | |
| 84 | - | |
| 85 | - jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("検索情報")); | |
| 86 | - | |
| 87 | - jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); | |
| 88 | - jTable1.getTableHeader().setReorderingAllowed(false); | |
| 89 | - | |
| 90 | - org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${serachDataList}"); | |
| 91 | - org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, jTable1); | |
| 92 | - org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${item}")); | |
| 93 | - columnBinding.setColumnName("項目名"); | |
| 94 | - columnBinding.setColumnClass(String.class); | |
| 95 | - columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmltag}")); | |
| 96 | - columnBinding.setColumnName("タグ"); | |
| 97 | - columnBinding.setColumnClass(String.class); | |
| 98 | - columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmlid}")); | |
| 99 | - columnBinding.setColumnName("ID"); | |
| 100 | - columnBinding.setColumnClass(String.class); | |
| 101 | - columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmlclass}")); | |
| 102 | - columnBinding.setColumnName("クラス"); | |
| 103 | - columnBinding.setColumnClass(String.class); | |
| 104 | - columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${around}")); | |
| 105 | - columnBinding.setColumnName("位置"); | |
| 106 | - columnBinding.setColumnClass(String.class); | |
| 107 | - columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${regexp}")); | |
| 108 | - columnBinding.setColumnName("抽出条件"); | |
| 109 | - columnBinding.setColumnClass(String.class); | |
| 110 | - bindingGroup.addBinding(jTableBinding); | |
| 111 | - jTableBinding.bind(); | |
| 112 | - jScrollPane1.setViewportView(jTable1); | |
| 113 | - | |
| 114 | - jBtnRowIns.setText("行挿入"); | |
| 115 | - jBtnRowIns.addActionListener(new java.awt.event.ActionListener() { | |
| 116 | - public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 117 | - jBtnRowInsActionPerformed(evt); | |
| 118 | - } | |
| 119 | - }); | |
| 120 | - | |
| 121 | - jBtnRowDel.setText("行削除"); | |
| 122 | - jBtnRowDel.addActionListener(new java.awt.event.ActionListener() { | |
| 123 | - public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 124 | - jBtnRowDelActionPerformed(evt); | |
| 125 | - } | |
| 126 | - }); | |
| 127 | - | |
| 128 | - jBtnRowCpy.setText("行コピー"); | |
| 129 | - jBtnRowCpy.addActionListener(new java.awt.event.ActionListener() { | |
| 130 | - public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 131 | - jBtnRowCpyActionPerformed(evt); | |
| 132 | - } | |
| 133 | - }); | |
| 134 | - | |
| 135 | - javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); | |
| 136 | - jPanel1.setLayout(jPanel1Layout); | |
| 137 | - jPanel1Layout.setHorizontalGroup( | |
| 138 | - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 139 | - .addGroup(jPanel1Layout.createSequentialGroup() | |
| 140 | - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
| 141 | - .addComponent(jBtnRowCpy) | |
| 142 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 143 | - .addComponent(jBtnRowDel) | |
| 144 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 145 | - .addComponent(jBtnRowIns)) | |
| 146 | - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) | |
| 147 | - ); | |
| 148 | - jPanel1Layout.setVerticalGroup( | |
| 149 | - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 150 | - .addGroup(jPanel1Layout.createSequentialGroup() | |
| 151 | - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 152 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 153 | - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
| 154 | - .addComponent(jBtnRowDel) | |
| 155 | - .addComponent(jBtnRowIns) | |
| 156 | - .addComponent(jBtnRowCpy))) | |
| 157 | - ); | |
| 158 | - | |
| 159 | - jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("検索結果")); | |
| 160 | - | |
| 161 | - jTxtRtn.setColumns(20); | |
| 162 | - jTxtRtn.setRows(5); | |
| 163 | - jScrollPane2.setViewportView(jTxtRtn); | |
| 164 | - | |
| 165 | - javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); | |
| 166 | - jPanel2.setLayout(jPanel2Layout); | |
| 167 | - jPanel2Layout.setHorizontalGroup( | |
| 168 | - jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 169 | - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE) | |
| 170 | - ); | |
| 171 | - jPanel2Layout.setVerticalGroup( | |
| 172 | - jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 173 | - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) | |
| 174 | - ); | |
| 175 | - | |
| 176 | - jMenu1.setText("ファイル"); | |
| 177 | - | |
| 178 | - jMenuLoad.setText("LOAD"); | |
| 179 | - jMenuLoad.addActionListener(new java.awt.event.ActionListener() { | |
| 180 | - public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 181 | - jMenuLoadActionPerformed(evt); | |
| 182 | - } | |
| 183 | - }); | |
| 184 | - jMenu1.add(jMenuLoad); | |
| 185 | - | |
| 186 | - jMenuSave.setText("SAVE"); | |
| 187 | - jMenuSave.addActionListener(new java.awt.event.ActionListener() { | |
| 188 | - public void actionPerformed(java.awt.event.ActionEvent evt) { | |
| 189 | - jMenuSaveActionPerformed(evt); | |
| 190 | - } | |
| 191 | - }); | |
| 192 | - jMenu1.add(jMenuSave); | |
| 193 | - | |
| 194 | - jMenuBar1.add(jMenu1); | |
| 195 | - | |
| 196 | - jMenu2.setText("検索"); | |
| 197 | - jMenu2.addMouseListener(new java.awt.event.MouseAdapter() { | |
| 198 | - public void mouseClicked(java.awt.event.MouseEvent evt) { | |
| 199 | - jMenu2MouseClicked(evt); | |
| 200 | - } | |
| 201 | - }); | |
| 202 | - jMenuBar1.add(jMenu2); | |
| 203 | - | |
| 204 | - setJMenuBar(jMenuBar1); | |
| 205 | - | |
| 206 | - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); | |
| 207 | - getContentPane().setLayout(layout); | |
| 208 | - layout.setHorizontalGroup( | |
| 209 | - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 210 | - .addGroup(layout.createSequentialGroup() | |
| 211 | - .addComponent(jLabel1) | |
| 212 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 213 | - .addComponent(jTxtUrl) | |
| 214 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 215 | - .addComponent(jBtnSearch)) | |
| 216 | - .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
| 217 | - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) | |
| 218 | - ); | |
| 219 | - layout.setVerticalGroup( | |
| 220 | - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | |
| 221 | - .addGroup(layout.createSequentialGroup() | |
| 222 | - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | |
| 223 | - .addComponent(jLabel1) | |
| 224 | - .addComponent(jTxtUrl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 225 | - .addComponent(jBtnSearch)) | |
| 226 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 227 | - .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | |
| 228 | - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | |
| 229 | - .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) | |
| 230 | - ); | |
| 231 | - | |
| 232 | - bindingGroup.bind(); | |
| 233 | - | |
| 234 | - pack(); | |
| 235 | - }// </editor-fold>//GEN-END:initComponents | |
| 236 | - | |
| 237 | - private void jBtnRowInsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowInsActionPerformed | |
| 238 | - int SelectedRow = jTable1.getSelectedRow(); | |
| 239 | - serachData sdat = new serachData(); | |
| 240 | - | |
| 241 | - if(SelectedRow >= 0) { | |
| 242 | - this.serachDataList.add(SelectedRow, sdat); | |
| 243 | - } else { | |
| 244 | - this.serachDataList.add(sdat); | |
| 245 | - } | |
| 246 | - }//GEN-LAST:event_jBtnRowInsActionPerformed | |
| 247 | - | |
| 248 | - private void jBtnRowDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowDelActionPerformed | |
| 249 | - int SelectedRow = jTable1.getSelectedRow(); | |
| 250 | - if(!(SelectedRow < 0)) { | |
| 251 | - this.serachDataList.remove(SelectedRow); | |
| 252 | - } | |
| 253 | - }//GEN-LAST:event_jBtnRowDelActionPerformed | |
| 254 | - | |
| 255 | - private void jMenuLoadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuLoadActionPerformed | |
| 256 | - int selected = jFileChooser1.showOpenDialog(this); | |
| 257 | - if (selected == JFileChooser.APPROVE_OPTION) { | |
| 258 | - File file = jFileChooser1.getSelectedFile(); | |
| 259 | - serachDataList.clear(); | |
| 260 | - sio.load(file); | |
| 261 | - jTxtUrl.setText(sio.geturl()); | |
| 262 | - serachDataList.addAll(sio.getslist()); | |
| 263 | - } | |
| 264 | - }//GEN-LAST:event_jMenuLoadActionPerformed | |
| 265 | - | |
| 266 | - private void jMenuSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuSaveActionPerformed | |
| 267 | - int selected = jFileChooser1.showSaveDialog(this); | |
| 268 | - if (selected == JFileChooser.APPROVE_OPTION) { | |
| 269 | - File file = jFileChooser1.getSelectedFile(); | |
| 270 | - sio.seturl(jTxtUrl.getText()); | |
| 271 | - sio.setslist(slist); | |
| 272 | - sio.save(file); | |
| 273 | - } | |
| 274 | - }//GEN-LAST:event_jMenuSaveActionPerformed | |
| 275 | - | |
| 276 | - private void jMenu2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenu2MouseClicked | |
| 277 | - jTxtRtn.setText(null); | |
| 278 | - HtmlParser par = new HtmlParser(jTxtUrl.getText()); | |
| 279 | - for (Object slist1 : slist) { | |
| 280 | - String rtn = par.search((serachData)slist1); | |
| 281 | - jTxtRtn.append(rtn + "\r\n"); | |
| 282 | - } | |
| 283 | - }//GEN-LAST:event_jMenu2MouseClicked | |
| 284 | - | |
| 285 | - private void jBtnRowCpyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowCpyActionPerformed | |
| 286 | - int SelectedRow = jTable1.getSelectedRow(); | |
| 287 | - if(SelectedRow >= 0) { | |
| 288 | - serachData SelectData = (serachData)slist.get(SelectedRow); | |
| 289 | - serachData Cpydata = new serachData(SelectData); | |
| 290 | - this.serachDataList.add(SelectedRow, Cpydata); | |
| 291 | - } | |
| 292 | - }//GEN-LAST:event_jBtnRowCpyActionPerformed | |
| 293 | - | |
| 294 | - private void jBtnSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnSearchActionPerformed | |
| 295 | - jTxtRtn.setText(null); | |
| 296 | - HtmlParser par = new HtmlParser(jTxtUrl.getText()); | |
| 297 | - for (Object slist1 : slist) { | |
| 298 | - String rtn = par.search((serachData)slist1); | |
| 299 | - jTxtRtn.append(rtn + "\r\n"); | |
| 300 | - } | |
| 301 | - }//GEN-LAST:event_jBtnSearchActionPerformed | |
| 302 | - | |
| 303 | - /** | |
| 304 | - * @param args the command line arguments | |
| 305 | - */ | |
| 306 | - public static void main(String args[]) { | |
| 307 | - /* Set the Nimbus look and feel */ | |
| 308 | - //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> | |
| 309 | - /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. | |
| 310 | - * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html | |
| 311 | - */ | |
| 312 | - try { | |
| 313 | - for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { | |
| 314 | - if ("Nimbus".equals(info.getName())) { | |
| 315 | - javax.swing.UIManager.setLookAndFeel(info.getClassName()); | |
| 316 | - break; | |
| 317 | - } | |
| 318 | - } | |
| 319 | - } catch (ClassNotFoundException ex) { | |
| 320 | - java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 321 | - } catch (InstantiationException ex) { | |
| 322 | - java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 323 | - } catch (IllegalAccessException ex) { | |
| 324 | - java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 325 | - } catch (javax.swing.UnsupportedLookAndFeelException ex) { | |
| 326 | - java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); | |
| 327 | - } | |
| 328 | - //</editor-fold> | |
| 329 | - | |
| 330 | - /* Create and display the form */ | |
| 331 | - java.awt.EventQueue.invokeLater(new Runnable() { | |
| 332 | - public void run() { | |
| 333 | - new Frame1().setVisible(true); | |
| 334 | - } | |
| 335 | - }); | |
| 336 | - } | |
| 337 | - | |
| 338 | - // Variables declaration - do not modify//GEN-BEGIN:variables | |
| 339 | - private javax.swing.JButton jBtnRowCpy; | |
| 340 | - private javax.swing.JButton jBtnRowDel; | |
| 341 | - private javax.swing.JButton jBtnRowIns; | |
| 342 | - private javax.swing.JButton jBtnSearch; | |
| 343 | - private javax.swing.JFileChooser jFileChooser1; | |
| 344 | - private javax.swing.JLabel jLabel1; | |
| 345 | - private javax.swing.JMenu jMenu1; | |
| 346 | - private javax.swing.JMenu jMenu2; | |
| 347 | - private javax.swing.JMenuBar jMenuBar1; | |
| 348 | - private javax.swing.JMenuItem jMenuLoad; | |
| 349 | - private javax.swing.JMenuItem jMenuSave; | |
| 350 | - private javax.swing.JPanel jPanel1; | |
| 351 | - private javax.swing.JPanel jPanel2; | |
| 352 | - private javax.swing.JScrollPane jScrollPane1; | |
| 353 | - private javax.swing.JScrollPane jScrollPane2; | |
| 354 | - private javax.swing.JTable jTable1; | |
| 355 | - private javax.swing.JTextArea jTxtRtn; | |
| 356 | - private javax.swing.JTextField jTxtUrl; | |
| 357 | - private org.jdesktop.beansbinding.BindingGroup bindingGroup; | |
| 358 | - // End of variables declaration//GEN-END:variables | |
| 359 | -} |
| @@ -1,204 +0,0 @@ | ||
| 1 | -/* | |
| 2 | - * To change this license header, choose License Headers in Project Properties. | |
| 3 | - * To change this template file, choose Tools | Templates | |
| 4 | - * and open the template in the editor. | |
| 5 | - */ | |
| 6 | - | |
| 7 | -package test1; | |
| 8 | - | |
| 9 | -import java.util.ArrayList; | |
| 10 | -import java.util.HashMap; | |
| 11 | -import javax.swing.text.MutableAttributeSet; | |
| 12 | -import javax.swing.text.html.HTML; | |
| 13 | -import javax.swing.text.html.HTMLEditorKit; | |
| 14 | - | |
| 15 | -/** | |
| 16 | - * | |
| 17 | - * @author kgto | |
| 18 | - */ | |
| 19 | -public class HtmlParserCallback extends HTMLEditorKit.ParserCallback { | |
| 20 | - | |
| 21 | - // デバック情報表示フラグ | |
| 22 | - final boolean DEBUG = false; | |
| 23 | - | |
| 24 | - // Tag毎の階層 | |
| 25 | - HashMap<HTML.Tag,Integer> tagMap = new HashMap<>(); | |
| 26 | - | |
| 27 | - // serach key 情報 | |
| 28 | - String keytag; | |
| 29 | - String keyid; | |
| 30 | - String keyclass; | |
| 31 | - | |
| 32 | - // serach key と一致時の情報退避 | |
| 33 | - int bufCount = 0; | |
| 34 | - HTML.Tag bufTag = null; | |
| 35 | - MutableAttributeSet bufAttr = null; | |
| 36 | - // serach key と一致時の情報格納ワーク | |
| 37 | - StringBuilder bufText; | |
| 38 | - | |
| 39 | - // serach key と一致時のデータ一覧 | |
| 40 | - ArrayList sData; | |
| 41 | - | |
| 42 | - public HtmlParserCallback(serachData skey) { | |
| 43 | - | |
| 44 | - // キー情報展開 | |
| 45 | - keytag = skey.getHtmltag(); | |
| 46 | - keyid = skey.getHtmlid(); | |
| 47 | - keyclass = skey.getHtmlclass(); | |
| 48 | - | |
| 49 | - sData = new ArrayList(); | |
| 50 | - } | |
| 51 | - | |
| 52 | - public ArrayList getrtnData() { | |
| 53 | - return this.sData; | |
| 54 | - } | |
| 55 | - | |
| 56 | - @Override | |
| 57 | - public void handleStartTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ | |
| 58 | - // Tag毎の階層を保持 | |
| 59 | - int count = 1; | |
| 60 | - if(tagMap.containsKey(tag)) { | |
| 61 | - count = tagMap.get(tag); | |
| 62 | - count++; | |
| 63 | - } | |
| 64 | - tagMap.put(tag, count); | |
| 65 | - | |
| 66 | - //--- DEBUG OUT ---- start --- | |
| 67 | - if(DEBUG) { | |
| 68 | - StringBuffer strBuf = new StringBuffer(); | |
| 69 | - String ret; | |
| 70 | - | |
| 71 | - strBuf.append(count).append(" : F : ").append(tag.toString()); | |
| 72 | - ret = (String)attr.getAttribute(HTML.Attribute.ID); | |
| 73 | - if(ret != null) { | |
| 74 | - strBuf.append(" [ID] ").append(ret); | |
| 75 | - } | |
| 76 | - ret = (String)attr.getAttribute(HTML.Attribute.CLASS); | |
| 77 | - if(ret != null) { | |
| 78 | - strBuf.append(" [CLASS] ").append(ret); | |
| 79 | - } | |
| 80 | - ret = (String)attr.getAttribute(HTML.Attribute.VALUE); | |
| 81 | - if(ret != null) { | |
| 82 | - strBuf.append(" [VALUE] ").append(ret); | |
| 83 | - } | |
| 84 | - System.out.println(strBuf); | |
| 85 | - } | |
| 86 | - //--- DEBUG OUT ---- end --- | |
| 87 | - | |
| 88 | - if(bufCount == 0) { | |
| 89 | - if(tag.toString().equals(keytag)) { | |
| 90 | - if(serachAttribute(attr)) { | |
| 91 | - bufCount = count; | |
| 92 | - bufTag = tag; | |
| 93 | - bufAttr = attr; | |
| 94 | - bufText = new StringBuilder(); | |
| 95 | - } | |
| 96 | - } | |
| 97 | - } | |
| 98 | - } | |
| 99 | - | |
| 100 | - @Override | |
| 101 | - public void handleEndTag(HTML.Tag tag, int pos){ | |
| 102 | - // Tag毎の階層を取得 | |
| 103 | - int count = 0; | |
| 104 | - if(tagMap.containsKey(tag)) { | |
| 105 | - count = tagMap.get(tag); | |
| 106 | - } | |
| 107 | - | |
| 108 | - //--- DEBUG OUT ---- start --- | |
| 109 | - if(DEBUG) { | |
| 110 | - System.out.println(count + " : E : " + tag.toString()); | |
| 111 | - } | |
| 112 | - //--- DEBUG OUT ---- end --- | |
| 113 | - | |
| 114 | - if(tag.equals(bufTag) && count <= bufCount) { | |
| 115 | - | |
| 116 | - // 溜め込んだ一致情報をリストへ格納 | |
| 117 | - sData.add(bufText.toString()); | |
| 118 | - | |
| 119 | - // 退避したserach keyとの一致情報クリア | |
| 120 | - bufCount = 0; | |
| 121 | - bufTag = null; | |
| 122 | - bufAttr = null; | |
| 123 | - bufText = null; | |
| 124 | - } | |
| 125 | - | |
| 126 | - // Tag毎の階層減算 | |
| 127 | - tagMap.put(tag, --count); | |
| 128 | - } | |
| 129 | - | |
| 130 | - @Override | |
| 131 | - public void handleText(char[] data, int pos){ | |
| 132 | - //--- DEBUG OUT ---- start --- | |
| 133 | - if(DEBUG) { | |
| 134 | - String dat = new String(data); | |
| 135 | - System.out.println(dat); | |
| 136 | - } | |
| 137 | - //--- DEBUG OUT ---- end --- | |
| 138 | - String splitchar = "\t"; | |
| 139 | - | |
| 140 | - //制御文字の削除 | |
| 141 | - // 0xa0 | |
| 142 | - StringBuilder buf = new StringBuilder(); | |
| 143 | - for(int i = 0; i < data.length; i++) { | |
| 144 | - if(data[i] > 0x1f && data[i] != 0x7f && data[i] != 0xa0) { | |
| 145 | - buf.append(data[i]); | |
| 146 | - } | |
| 147 | - } | |
| 148 | - | |
| 149 | - if(bufCount > 0) { | |
| 150 | - if(bufText.length() > 0) { | |
| 151 | - bufText.append(splitchar); | |
| 152 | - } | |
| 153 | - bufText.append(buf.toString()); | |
| 154 | - } | |
| 155 | - | |
| 156 | - } | |
| 157 | - | |
| 158 | - @Override | |
| 159 | - public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attr, int pos){ | |
| 160 | - //--- DEBUG OUT ---- start --- | |
| 161 | - if(DEBUG) { | |
| 162 | - StringBuffer strBuf = new StringBuffer(); | |
| 163 | - String ret; | |
| 164 | - strBuf.append("x : S : ").append(tag.toString()); | |
| 165 | - ret = (String)attr.getAttribute(HTML.Attribute.VALUE); | |
| 166 | - if(ret != null) { | |
| 167 | - strBuf.append(" [VALUE] ").append(ret); | |
| 168 | - } | |
| 169 | - System.out.println(strBuf); | |
| 170 | - } | |
| 171 | - //--- DEBUG OUT ---- end --- | |
| 172 | - } | |
| 173 | - | |
| 174 | - /** | |
| 175 | - * ページ内のID/CLASS値と検索キーを比較する。 | |
| 176 | - * @param attr ページのMutableAttributeSet | |
| 177 | - * @return boolean 検索キーと一致の時、true | |
| 178 | - */ | |
| 179 | - public boolean serachAttribute(MutableAttributeSet attr) { | |
| 180 | - String currentID = (String)attr.getAttribute(HTML.Attribute.ID); | |
| 181 | - String currentClass = (String)attr.getAttribute(HTML.Attribute.CLASS); | |
| 182 | - | |
| 183 | - if(keyid.isEmpty() == false && keyclass.isEmpty() == false) { | |
| 184 | - if(keyid.equals(currentID) && keyclass.equals(currentClass)) { | |
| 185 | - return true; | |
| 186 | - } | |
| 187 | - } | |
| 188 | - | |
| 189 | - if(keyid.isEmpty() == false) { | |
| 190 | - if(keyid.equals(currentID)) { | |
| 191 | - return true; | |
| 192 | - } | |
| 193 | - } | |
| 194 | - | |
| 195 | - if(keyclass.isEmpty() == false) { | |
| 196 | - if(keyclass.equals(currentClass)) { | |
| 197 | - return true; | |
| 198 | - } | |
| 199 | - } | |
| 200 | - | |
| 201 | - return false; | |
| 202 | - } | |
| 203 | - | |
| 204 | -} |
| @@ -1,82 +0,0 @@ | ||
| 1 | -/* | |
| 2 | - * To change this license header, choose License Headers in Project Properties. | |
| 3 | - * To change this template file, choose Tools | Templates | |
| 4 | - * and open the template in the editor. | |
| 5 | - */ | |
| 6 | - | |
| 7 | -package test1; | |
| 8 | - | |
| 9 | -/** | |
| 10 | - * | |
| 11 | - * @author kgto | |
| 12 | - */ | |
| 13 | -public class serachData { | |
| 14 | - | |
| 15 | - private String item; | |
| 16 | - private String htmltag; | |
| 17 | - private String htmlid; | |
| 18 | - private String htmlclass; | |
| 19 | - private String around; | |
| 20 | - private String regexp; | |
| 21 | - | |
| 22 | - public serachData() { | |
| 23 | - } | |
| 24 | - | |
| 25 | - public serachData(serachData dat) { | |
| 26 | - this.item = dat.getitem(); | |
| 27 | - this.htmltag = dat.getHtmltag(); | |
| 28 | - this.htmlid = dat.getHtmlid(); | |
| 29 | - this.htmlclass = dat.getHtmlclass(); | |
| 30 | - this.around = dat.getaround(); | |
| 31 | - this.regexp = dat.getregexp(); | |
| 32 | - } | |
| 33 | - | |
| 34 | - public void setitem(String item) { | |
| 35 | - this.item = item; | |
| 36 | - } | |
| 37 | - | |
| 38 | - public void setHtmltag(String htmltag) { | |
| 39 | - this.htmltag = htmltag; | |
| 40 | - } | |
| 41 | - | |
| 42 | - public void setHtmlid(String htmlid) { | |
| 43 | - this.htmlid = htmlid; | |
| 44 | - } | |
| 45 | - | |
| 46 | - public void setHtmlclass(String htmlclass) { | |
| 47 | - this.htmlclass = htmlclass; | |
| 48 | - } | |
| 49 | - | |
| 50 | - public void setaround(String around) { | |
| 51 | - this.around = around; | |
| 52 | - } | |
| 53 | - | |
| 54 | - public void setregexp(String regexp) { | |
| 55 | - this.regexp = regexp; | |
| 56 | - } | |
| 57 | - | |
| 58 | - public String getitem() { | |
| 59 | - return item; | |
| 60 | - } | |
| 61 | - | |
| 62 | - public String getHtmltag() { | |
| 63 | - return htmltag; | |
| 64 | - } | |
| 65 | - | |
| 66 | - public String getHtmlid() { | |
| 67 | - return htmlid; | |
| 68 | - } | |
| 69 | - | |
| 70 | - public String getHtmlclass() { | |
| 71 | - return htmlclass; | |
| 72 | - } | |
| 73 | - | |
| 74 | - public String getaround() { | |
| 75 | - return around; | |
| 76 | - } | |
| 77 | - | |
| 78 | - public String getregexp() { | |
| 79 | - return regexp; | |
| 80 | - } | |
| 81 | - | |
| 82 | -} |
| @@ -1,190 +0,0 @@ | ||
| 1 | -/* | |
| 2 | - * To change this license header, choose License Headers in Project Properties. | |
| 3 | - * To change this template file, choose Tools | Templates | |
| 4 | - * and open the template in the editor. | |
| 5 | - */ | |
| 6 | - | |
| 7 | -package test1; | |
| 8 | - | |
| 9 | -import java.io.*; | |
| 10 | -import java.net.*; | |
| 11 | -import java.util.ArrayList; | |
| 12 | -import java.util.regex.Matcher; | |
| 13 | -import java.util.regex.Pattern; | |
| 14 | -import javax.swing.text.html.parser.ParserDelegator; | |
| 15 | - | |
| 16 | -/** | |
| 17 | - * | |
| 18 | - * @author kgto | |
| 19 | - */ | |
| 20 | -public class HtmlParser { | |
| 21 | - | |
| 22 | - String UrlAdress; | |
| 23 | - String pageData; | |
| 24 | - | |
| 25 | - ArrayList sData; | |
| 26 | - | |
| 27 | - // 作業ワーク | |
| 28 | - String htmltag; | |
| 29 | - String htmlid; | |
| 30 | - String htmlclass; | |
| 31 | - | |
| 32 | - public HtmlParser() { | |
| 33 | - UrlAdress = null; | |
| 34 | - } | |
| 35 | - | |
| 36 | - public HtmlParser(String UrlAdress) { | |
| 37 | - this.UrlAdress = UrlAdress; | |
| 38 | - getpageData(); | |
| 39 | - } | |
| 40 | - | |
| 41 | - public void seturl(String UrlAdress) { | |
| 42 | - this.UrlAdress = UrlAdress; | |
| 43 | - getpageData(); | |
| 44 | - } | |
| 45 | - | |
| 46 | - public String search(serachData skey) { | |
| 47 | - | |
| 48 | - String item = skey.getitem(); | |
| 49 | - String regexp = skey.getregexp(); | |
| 50 | - | |
| 51 | - // htmlページ内を検索 | |
| 52 | - if(isHtmlkeyEq(skey) == false) { | |
| 53 | - serchpageData(skey); | |
| 54 | - } | |
| 55 | - | |
| 56 | - // 検索位置を数値変換 | |
| 57 | - String around = skey.getaround(); | |
| 58 | - byte bAround = 0; | |
| 59 | - if(around.length() > 0) { | |
| 60 | - bAround = Byte.parseByte(around); | |
| 61 | - } | |
| 62 | - | |
| 63 | - if(bAround < sData.size()) { | |
| 64 | - String str = (String)sData.get(bAround); | |
| 65 | - String rtn = RegularExpression(str, regexp); | |
| 66 | - return item + "\t" + rtn; | |
| 67 | - } | |
| 68 | - return null; | |
| 69 | - } | |
| 70 | - | |
| 71 | - /** | |
| 72 | - * 直近のHTMLタグ/ID/CLASS値と引数の値を比較する。 | |
| 73 | - * @param skey HTMLタグ/ID/CLASSが格納された検索キー | |
| 74 | - * @return boolean HTMLタグ/ID/CLASS値が一致する時、true | |
| 75 | - */ | |
| 76 | - public boolean isHtmlkeyEq(serachData skey) { | |
| 77 | - | |
| 78 | - String stag = skey.getHtmltag(); | |
| 79 | - String sid = skey.getHtmlid(); | |
| 80 | - String sclass = skey.getHtmlclass(); | |
| 81 | - | |
| 82 | - boolean rtn = true; | |
| 83 | - | |
| 84 | - // htmltag | |
| 85 | - if(htmltag == null) { | |
| 86 | - rtn = false; | |
| 87 | - } else { | |
| 88 | - if(htmltag.equals(stag) == false) { | |
| 89 | - rtn = false; | |
| 90 | - } | |
| 91 | - } | |
| 92 | - | |
| 93 | - // htmlid | |
| 94 | - if(htmlid == null) { | |
| 95 | - rtn = false; | |
| 96 | - } else { | |
| 97 | - if(htmlid.equals(sid) == false) { | |
| 98 | - rtn = false; | |
| 99 | - } | |
| 100 | - } | |
| 101 | - | |
| 102 | - // htmlclass | |
| 103 | - if(htmlclass == null) { | |
| 104 | - rtn = false; | |
| 105 | - } else { | |
| 106 | - if(htmlclass.equals(sclass) == false) { | |
| 107 | - rtn = false; | |
| 108 | - } | |
| 109 | - } | |
| 110 | - | |
| 111 | - if(!rtn) { | |
| 112 | - htmltag = stag; | |
| 113 | - htmlid = sid; | |
| 114 | - htmlclass = sclass; | |
| 115 | - } | |
| 116 | - | |
| 117 | - return rtn; | |
| 118 | - } | |
| 119 | - | |
| 120 | - /** | |
| 121 | - * 正規表現検索 | |
| 122 | - * @param strdata | |
| 123 | - * @param regexp | |
| 124 | - * @return | |
| 125 | - */ | |
| 126 | - public String RegularExpression(String strdata, String regexp) { | |
| 127 | - String expdata = null; | |
| 128 | - | |
| 129 | - //regexpのチェック | |
| 130 | - if(regexp.isEmpty()) { | |
| 131 | - expdata = strdata; | |
| 132 | - return expdata; | |
| 133 | - } | |
| 134 | - | |
| 135 | - //正規表現検索 | |
| 136 | - Pattern ptn = Pattern.compile(regexp); | |
| 137 | - Matcher matchdata = ptn.matcher(strdata); | |
| 138 | - if (matchdata.find()) { | |
| 139 | - if(matchdata.groupCount() >= 1) { | |
| 140 | - expdata = matchdata.group(1); | |
| 141 | - } | |
| 142 | - } | |
| 143 | - return expdata; | |
| 144 | - } | |
| 145 | - | |
| 146 | - /** | |
| 147 | - * インターネット接続 | |
| 148 | - */ | |
| 149 | - public void getpageData() { | |
| 150 | - try { | |
| 151 | - URL url = new URL(UrlAdress); | |
| 152 | - HttpURLConnection con = (HttpURLConnection)url.openConnection(); | |
| 153 | - con.setRequestMethod("GET"); | |
| 154 | - BufferedReader reader = new BufferedReader( | |
| 155 | - new InputStreamReader(con.getInputStream(), "utf-8")); | |
| 156 | - String wkline; | |
| 157 | - StringBuilder sb = new StringBuilder(); | |
| 158 | - while((wkline = reader.readLine()) != null) { | |
| 159 | - sb.append(wkline).append("\n"); | |
| 160 | - } | |
| 161 | - pageData = sb.toString(); | |
| 162 | - | |
| 163 | - con.disconnect(); | |
| 164 | - } | |
| 165 | - catch(IOException e) { | |
| 166 | - System.err.println(e); | |
| 167 | - } | |
| 168 | - } | |
| 169 | - | |
| 170 | - /** | |
| 171 | - * HTMLパーサ | |
| 172 | - * @param skey | |
| 173 | - */ | |
| 174 | - public void serchpageData(serachData skey){ | |
| 175 | - Reader reader; | |
| 176 | - try { | |
| 177 | - reader = new BufferedReader(new StringReader(pageData)); | |
| 178 | - HtmlParserCallback cb = new HtmlParserCallback(skey); | |
| 179 | - ParserDelegator pd = new ParserDelegator(); | |
| 180 | - pd.parse(reader, cb, true); | |
| 181 | - reader.close(); | |
| 182 | - | |
| 183 | - sData = cb.getrtnData(); | |
| 184 | - | |
| 185 | - } catch (IOException e) { | |
| 186 | - System.err.println(e); | |
| 187 | - } | |
| 188 | - } | |
| 189 | - | |
| 190 | -} |