Save output after applying an replace

Asked

Viewed 85 times

1

Hello, I have the following code below, but I need to apply a replace in the output(FileOutputStream) picked up via http before saving him.

    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();
    }


In the 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 to apply a replace to tags < and > but excluding the --> of this rule, in this example we have only the tag <font color but it is possible that there are other tags in the formatting, for example <i>.


The end result must be 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 in the entire/output file.

  • Yeah, apparently there are some codes that aren’t used, so forgive me for that, feel free to make the necessary adjustments.

1 answer

3


This regular expression should help:

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



Follow the full 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);
}
  • Thanks, but how to do this with the output? That’s the question.

  • @Florida updated showing how to do.

  • It worked perfectly, but with a "bug" when there is a line break it does not replace. Ex: <i>Primeira linha. Segunda Linha.</i> Running only on a single Ex line: [i]Unica linha[/i]

  • This fixes the "bug" "\\<(.+?)\\>", "[$1]", I spent a few hours to solve this, but I believe you taught me something. The answer is correct, not 100% =) +1

  • 1

    @Florida do an edition adjusting regular expression that you used, really in the examples that you passed did not have this scenario so I ended up not treating. I’m glad you could help.

  • Hello, I made two edits, were rejected, apparently they do not see the comments and it is difficult to know if it is an edition to improve or not, so if possible, you could edit with the correction.

Show 1 more comment

Browser other questions tagged

You are not signed in. Login or sign up in order to post.