Save output after applying a replace

1

Hello, I have the following code, but I need to apply a replace to output ( FileOutputStream ) I get via http before saving it.

    public void DownloadFile(String fileURL, String fileName) {
        new Thread(new Runnable()

        {
            public void run() {
        try {
            //set the download URL, a url that points to a file on the internet
            //this is the file to be downloaded
            URL url = new URL("http://localhost/test.txt");

            //create the new connection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            //set up some things on the connection
            urlConnection.setRequestMethod("GET");
            //urlConnection.setDoOutput(true);

            //and connect!
            urlConnection.connect();

            //set the path where we want to save the file
            //in this case, going to save it on the root directory of the
            //sd card.
            File SDCardRoot = Environment.getExternalStorageDirectory();
            //create a new file, specifying the path, and the filename
            //which we want to save the file as.
            File file = new File(SDCardRoot,"test.txt");

            //this will be used to write the downloaded data into the file we created
            FileOutputStream fileOutput = new FileOutputStream(file);

            //this will be used in reading the data from the internet
            InputStream inputStream = urlConnection.getInputStream();

            //this is the total size of the file
            int totalSize = urlConnection.getContentLength();
            //variable to store total downloaded bytes
            int downloadedSize = 0;

            //create a buffer...
            byte[] buffer = new byte[1024];
            int bufferLength = 0; //used to store a temporary size of the buffer

            //now, read through the input buffer and write the contents to the file
            while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                //add the data in the buffer to the file in the file output stream (the file on the sd card
                fileOutput.write(buffer, 0, bufferLength);
                //add up the size so we know how much is downloaded
                //downloadedSize += bufferLength;
                //this is where you would do something to report the prgress, like this maybe
                //updateProgress(downloadedSize, totalSize);

            }
            //close the output stream when done
            fileOutput.close();

//catch some possible errors...
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

                //faca qualquer coisa aqui
            }
        }).start();
    }


No output I have the following:

1
00:00:02,285 --> 00:00:05,277
<font color="#12E512">- Wow.</font>

2
00:00:07,390 --> 00:00:08,789
<i>Hello<i>
...

I need a replace for tags < and > but excluding --> of this rule, in this example we only have the <font color tag but it is possible that other tags in the formatting, <i> .


The end result should look something like this:

1
00:00:02,285 --> 00:00:05,277
[font color="#12E512"]- Wow.[/font]

2
00:00:07,390 --> 00:00:08,789
[i]Hello[i]
... 
  

Note, it should do this throughout the file / output.

    
asked by anonymous 26.07.2015 / 04:29

1 answer

3

This regular expression should help:

String html = ""// seu html...
String replaced = html.replaceAll("\<(.+?)\>(.+?)\<(.+?)\>", "[$1]$2[$3]");



Follow the complete block by doing conversions before writing to outputstream:

while ((bufferLength = fis.read(buffer)) > 0) {
    // transforma o byte array em uma string unicode
    String bufferString = new String(buffer, "UTF-8");
    // aplica a ereg modificando os tags
    bufferString = bufferString.replaceAll( 
     "\<(.+?)\>", "[$1]"); //(Atualização da regex correta)
    //escreve no stream de output convertendo a string pra um array de bytes 
    fileOutput.write(bufferString.getBytes(Charset.forName("UTF-8")),
            0, bufferLength);
}
    
26.07.2015 / 06:07