]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/FileCacher.java
ad0f0efb9088855696c898178bee335f25bfadaf
[GpsPrune.git] / tim / prune / load / FileCacher.java
1 package tim.prune.load;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.util.ArrayList;
8
9 /**
10  * Class to load the contents of a file
11  * into an array for later retrieval
12  */
13 public class FileCacher
14 {
15         private File _file = null;
16         private String[] _contentArray = null;
17
18
19         /**
20          * Constructor
21          * @param inFile File object to cache
22          */
23         public FileCacher(File inFile)
24         {
25                 _file = inFile;
26                 loadFile();
27         }
28
29
30         /**
31          * Load the specified file into memory
32          */
33         private void loadFile()
34         {
35                 ArrayList contentList = new ArrayList();
36                 if (_file != null && _file.exists() && _file.canRead())
37                 {
38                         BufferedReader reader = null;
39                         try
40                         {
41                                 reader = new BufferedReader(new FileReader(_file));
42                                 String currLine = reader.readLine();
43                                 while (currLine != null)
44                                 {
45                                         if (currLine.trim().length() > 0)
46                                                 contentList.add(currLine);
47                                         currLine = reader.readLine();
48                                 }
49                         }
50                         catch (IOException ioe) {}
51                         finally
52                         {
53                                 // close file ignoring errors
54                                 try
55                                 {
56                                         if (reader != null) reader.close();
57                                 }
58                                 catch (Exception e) {}
59                         }
60                 }
61                 // Convert into String array for keeps
62                 int numLines = contentList.size();
63                 _contentArray = new String[numLines];
64                 for (int i=0; i<numLines; i++)
65                         _contentArray[i] = contentList.get(i).toString();
66         }
67
68
69         /**
70          * @return Contents of the file as array of non-blank Strings
71          */
72         public String[] getContents()
73         {
74                 return _contentArray;
75         }
76
77
78         /**
79          * Get the top section of the file for preview
80          * @param inSize number of lines to extract
81          * @return String array containing non-blank lines from the file
82          */
83         public String[] getSnippet(int inNumRows, int inMaxWidth)
84         {
85                 final int MIN_SNIPPET_SIZE = 3;
86                 // Check size is within sensible limits
87                 int numToCopy = inNumRows;
88                 if (numToCopy > getNumLines()) numToCopy = getNumLines();
89                 int size = numToCopy;
90                 if (size < MIN_SNIPPET_SIZE) size = MIN_SNIPPET_SIZE;
91                 String[] result = new String[size];
92                 // Copy Strings across
93                 System.arraycopy(_contentArray, 0, result, 0, numToCopy);
94                 // Chop Strings to max width if necessary
95                 if (inMaxWidth > 10)
96                 {
97                         for (int i=0; i<size; i++)
98                         {
99                                 if (result[i] == null)
100                                         result[i] = "";
101                                 else
102                                 {
103                                         if (result[i].length() > inMaxWidth)
104                                                 result[i] = result[i].trim();
105                                         if (result[i].length() > inMaxWidth)
106                                                 result[i] = result[i].substring(0, inMaxWidth);
107                                 }
108                         }
109                 }
110                 return result;
111         }
112
113         /**
114          * @return the number of non-blank lines in the file
115          */
116         public int getNumLines()
117         {
118                 return _contentArray.length;
119         }
120
121
122         /**
123          * Clear the memory
124          */
125         public void clear()
126         {
127                 _file = null;
128                 _contentArray = null;
129         }
130 }