HTML Datei einlesen und HTML Code in String wandeln

beta20

Top Contributor
Hallo zusammen,

ich möchte gerne HTML - Dateien einlesen. Den Code von der Datei möchte ich dann gerne in einen String speichern.
Welche Library ist im Jahre 2019 hier gängig? Wünschenswert, wenn es 1-2 Zeilen Code sind:

Sowas wie:
String s = htmlLib.readFile(filePath);

Danke für die Hilfe
 

beta20

Top Contributor
Super, schaue ich mir mal an.

Genau, es geht einfach darum eine HTML Datei (test.html) in JAVA einzulesen, sodass ich den Code dieser HTML Datei in einen String speichern kann.
Dieser String möchte ich dann wieder in meine Datenbank speichern....
 

beta20

Top Contributor
Falls du einfach nur den gesamten Inhalt der Datei willst: String.join("\n", Files.readAllLines(filePath))

Und was willst du am Ende machen? Was macht dieses

Html in der Datenbank speichern klingt uU nicht sehr sinnvoll...

Muss ich hier noch auf irgendwas aufpassen? Zeichenkodierung oder sowas? Was ist das: String.join("\n" ?
________
Ich möchte mir verschiedene HTML Dateien erstellen, die ich später als Emailtemplate verwenden möchte.
Zum Beispiel ein EmailTemplate für "Registrierung", inkl. Firmenlogo, Anschrift usw.

Das Template (HTML Code) enthält wiederum Platzhalter, die dann zur Laufzeit befüllt werden (u.a. mit Name, Vorname usw.).

Worfflow:
- User registriert sich
- System holt sich aus der Datenbank das EmailTemplate (der HTML Code, der aus der Datei kommt)
- System ersetzt Platzhalter mit richtigen Daten
- Versand Email
 

mrBrown

Super-Moderator
Mitarbeiter
Was ist das: String.join("\n" ?
Eine statische Methode der Klasse String und das erste Argument des Aufrufs? String#join

Ich möchte mir verschiedene HTML Dateien erstellen, die ich später als Emailtemplate verwenden möchte.
Zum Beispiel ein EmailTemplate für "Registrierung", inkl. Firmenlogo, Anschrift usw.

Das Template (HTML Code) enthält wiederum Platzhalter, die dann zur Laufzeit befüllt werden (u.a. mit Name, Vorname usw.).

Worfflow:
- User registriert sich
- System holt sich aus der Datenbank das EmailTemplate (der HTML Code, der aus der Datei kommt)
- System ersetzt Platzhalter mit richtigen Daten
- Versand Email
Nimm dafür irgendein Template-Framework, anstatt das selber zu basteln, zB Velocity oder Thymeleaf.
 

beta20

Top Contributor
Danke für die Nennung der Frameworks.
Welches der beiden ist denn empfehlunsgwerter?

1) Für was meinst du nun genau, sollte ich das Framework verwenden? Der Code der HTML Email muss ja irgendwoher herkommen?

2) Wie würde das denn von der Umsetzung aussehen?

3) Derzeit:
Was ich derzeit mache ist (ist ein großer Aufwand):
- Ich habe bei jeder Entity (zB Customer) String für meine Attributfelder:
public final String CUSTOMER_NUMBER = "[%CUSTOMER_NUMBER%]".

Dann habe ich eben eine Methode, wie:
Java:
public checkString(String s, Customer customer) {
if(s.contains(Customer.CUSTOMER_NUMBER) {
  s.replace(Customer.CUSTOMER_NUMBER, customer.getCustomerNumber)
.....

Wie kann man das denn optimieren?


Ich verwende diese Platzhalter nicht nur bei EmailTemplates, sondern auch bei Texten, die der User selbst definieren kann.
Also sprich der User kann sich selbst Textvorlagen speichern, in welchem dann eben die Platzhalter im String ebenfalls mit gespeichert werden.

Hallo Kunde,
Du hast die Nummer: [%CUSTOMER_NUMBER%]
-> So wird der String dann in die Datenbank gespeichert und bei der Laufzeit eben mit dem Feld gefüllt.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Danke für die Nennung der Frameworks.
Welches der beiden ist denn empfehlunsgwerter?
Keine Ahnung, Mustache wäre uU auch noch eine Alternative, grad wenn es recht einfach gehalten sein soll.

1) Für was meinst du nun genau, sollte ich das Framework verwenden? Der Code der HTML Email muss ja irgendwoher herkommen?
Für das generieren von gültigem Markup aus Templates.
Das Template kann überall herkommen, wenn du Features einer Datenbank brauchst, dann ruhig Datenbank.

2) Wie würde das denn von der Umsetzung aussehen?
Guck dir einfach mal die Doku der Frameworks an?

Wie kann man das denn optimieren?
Wie gesagt, passendes Framework dafür verwenden :)

Selber schreiben endet in riesigem Aufwand und produziert am Ende nur Sicherheitslücken.

Ich verwende diese Platzhalter nicht nur bei EmailTemplates, sondern auch bei Texten, die der User selbst definieren kann.
Ob da am Ende ne email oder ein beliebiger Text bei rauskommt, macht doch keinen Unterschied?
 

beta20

Top Contributor
Ok, also das Prinzip habe ich verstanden. Was ich aber nicht verstehe, wie hole ich von einem Objekt den Wert der Property?
Java:
Customer customer = new Customer();
customer.setName("Hugo");

VelocityContext context = new VelocityContext();
 context.put("name", "World");

Wie kann ich nun "World" ersetzen. Ich will NICHT customer.getName() hier reinschreiben.
Gibt es hier zB etwas wie "customer.name", welches mir dann die Get - Methode vom Objekt zurückliefert?

Was ich mir vorstellen kann ist:
Ich habe in meiner Datenbank eine Liste aller Platzhalter mit den Feldern:
- PlatzhalterName (zB "customerName")
- Entity (zB "customer"
- Attribut von Entity (um die Get Methode der Entity aufzurufen)

Also im Endeffekt möchte ich mir diesen Code sparen:

Java:
public String getValueFromProper(Customer customer, String propertyName){
if(propertyName.equals("customerName)){
    return customer.getCustomerName();
}
// Diese Abfrage für alle weiteren Felder!!
......
}
 

mihe7

Top Contributor
Der Doku entsprechend würde ich mal annehmen:
Java:
Customer customer = ...
context.put("customer", customer);

Code:
$customer.customerName
 

mrBrown

Super-Moderator
Mitarbeiter

beta20

Top Contributor
Also so ganz habe ich das noch nicht verstanden, sorry.
Wenn ich einen String habe:

String sReplacement = Hallo $customer.customerName,
....

Und in meinem Backend habe ich eine Methode, die mir dann diesen String mit den "echten" Daten befüllt:
Am Ende kommt dann ein String wiederum heraus, aber eben mit den "richtigen" Daten

Java:
public String replace(String sReplacement, Customer customer) {
    context.put("customer", customer);
    StringWriter writer = new StringWriter();
    t.merge( context, writer );
    System.out.println( writer.toString() ); 
}
Passt das so?

Jetzt gibt es aber ein Problem:
Ich möchte nicht, dass ALLE Felder ausgegeben werden können (nicht vom normalen User).
So wie ich das verstehe, könnte er dann in seiner Textvorlage: $customer.id hereinschreiben, und dann wird eben die ID ausgelesen.

Daher ist die Idee die Platzhalter in einer DB zu speichern:
- ID
- Name (customer.customerName)
- Entity

In etwa so:

Java:
public String replace(String sReplacement, Customer customer) {
// Hole Platzhalter Liste aus DB
List<ReplacementEntity> list = holeVonDatenbank();
for(ReplacementEntity r : list){
context.put(r.getName(), customer);
}
    StringWriter writer = new StringWriter();
    t.merge( context, writer );
    System.out.println( writer.toString() ); 
}


Eine weiter Frage:
Kann man den Platzhalter auch anderst darstellen, als $customer.customerName.
Ich hätte das eher gerne so: {{customer.customerName}} oder [%customer.customerName%]
Oder funktioniert das dann nicht mehr in Velocity?
 

mrBrown

Super-Moderator
Mitarbeiter
Jetzt gibt es aber ein Problem:
Ich möchte nicht, dass ALLE Felder ausgegeben werden können (nicht vom normalen User).
So wie ich das verstehe, könnte er dann in seiner Textvorlage: $customer.id hereinschreiben, und dann wird eben die ID ausgelesen.
Nutz dafür entsprechende DTOs, die einfach nur die Felder enthalten, die benutzt werden dürfen.

Eine weiter Frage:
Kann man den Platzhalter auch anderst darstellen, als $customer.customerName.
Ich hätte das eher gerne so: {{customer.customerName}} oder [%customer.customerName%]
Oder funktioniert das dann nicht mehr in Velocity?
Keine Ahnung ob das mit Velocity geht, generell bietet schon jedes Framework seine eigene Syntax, {{customer.customerName}} wird zb von mustache genutzt.
 

beta20

Top Contributor
Habe jetzt mal beide Libs ausprobiert, funktioniert soweit auch....

Nun aber eine Frage zu DTO´s (habe ich bisher NIE verwendet):
Aus meiner Datenbank liefere ich ein POJO "Customer" zurück.

Wie wandle ich denn nun das POJO "Customer" in das DTO "CustomerDTO"?
Klar könnte ich dann sowas schreiben:

Java:
public CustomerDTO convertToCustomerDTO(Customer customer){
    CustomerDTO newCustomerDTO  = new CustomerDTO()
    newCustomerDTO.setId(customer.getId());
    .... usw.
        
    return newCustomerDTO;
}

Wie macht man das denn?
 

mrBrown

Super-Moderator
Mitarbeiter
Wie wandle ich denn nun das POJO "Customer" in das DTO "CustomerDTO"?
Klar könnte ich dann sowas schreiben:

Java:
public CustomerDTO convertToCustomerDTO(Customer customer){
    CustomerDTO newCustomerDTO  = new CustomerDTO()
    newCustomerDTO.setId(customer.getId());
    .... usw.
       
    return newCustomerDTO;
}

Wie macht man das denn?
Naja, das macht man genau so.
 

mihe7

Top Contributor
Ein Decorator wäre auch eine Möglichkeit:

Java:
class CustomerDTO {
    private final Customer delegate;

    public CustomerDTO(Customer customer) { delegate = customer; }
    public String getName() { return customer.getName(); }
}
 

beta20

Top Contributor
Habe noch eine Frage zu Datumformat, Numberformat....

Der Kunde kann je nach Einstellung in verschiedenenen Formaten ausgegeben werden.
Wie mache ich das dann?

Wünschenswert wäre, dass ich in der Variable das Dateformat mitgeben kann:
{{createDate, dd.MM.yyyy}}

Alternativ könnte ich mir eine globale Einstellung vorstellen.
Sodass ich dem Customer mitgebe:
- String dateFormat
- String numberFormat

Der Getter von "createDate" liefert mir dann einen String zurück (mit Berücksichtigung des eingestellten Dateformats) ?

Java:
public String dateFormat = "dd/MM/yyyy";
private Date createDateORIG;
private String createDate;

public String getCreateDate() {
  return new SimpleDateFormat(dateFormat ).format(createDateORIG);
}

Dann setze ich beim Kunden das ORIG Date:
customer.setCreateDateORIG(new Date());

Mustache m = mf.compile(new StringReader("{{customer.createDate }}"), "nameUsedForErrorReporting");
Map<String, Object> context = new HashMap<>();
context.put("customer", customer);

-> Liefert das: 07/08/2019

Oder wie löst man das sonst?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Einlesen von Strings aus html-datei Java Basics - Anfänger-Themen 3
D HTML-Datei einlesen/parsen Java Basics - Anfänger-Themen 9
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
krgewb Input/Output Umlaute in generierter HTML-Datei Java Basics - Anfänger-Themen 7
F HTML Datei in .jar speichern und abändern Java Basics - Anfänger-Themen 2
I jar-Datei in HTML einbinden Java Basics - Anfänger-Themen 6
J Methode um eine HTML-Datei zu öffnen Java Basics - Anfänger-Themen 10
A HTML-Code auslesen und mit einem Wert in der property-Datei vergleichen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C einfacher Link zu *.html Datei möglich? Java Basics - Anfänger-Themen 4
3 Eine HTML Datei in eine Java Datei umschreiben Java Basics - Anfänger-Themen 23
M Frage zum Aufruf eines Applets aus einer HTML - Datei Java Basics - Anfänger-Themen 3
I CSV Datei auf HTML Seite hochladen und in DB laden Java Basics - Anfänger-Themen 9
S Text aus HTML Datei in TXT Datei Java Basics - Anfänger-Themen 19
Ollek Bestimmte Zeilen aus einer HTML Datei lesen Java Basics - Anfänger-Themen 8
Developer_X HTML Datei nicht von Java Lesbar Java Basics - Anfänger-Themen 8
M html datei drucken Java Basics - Anfänger-Themen 18
M HTML Datei bearbeiten Java Basics - Anfänger-Themen 14
M HTML Datei als Text rausspeichern Java Basics - Anfänger-Themen 3
C Erstellen und Beschreiben einer HTML-Datei Java Basics - Anfänger-Themen 4
G JEditorPane - HTML Datei übergeben? Java Basics - Anfänger-Themen 3
Semox Umwandlung von Sonderzeichen in HTML-Datei mit Ausgabe Java Basics - Anfänger-Themen 7
T Ausgeben von einer php/html Datei in Java Java Basics - Anfänger-Themen 5
G Hilfer zur einer Anwendung soll HTML Datei öffnen Java Basics - Anfänger-Themen 4
E HTML-Datei im Javaprojekt anzeigen lassen Java Basics - Anfänger-Themen 7
D Komfortabel HTML - Datei schreiben Java Basics - Anfänger-Themen 2
T HTML-Datei ausgeben Java Basics - Anfänger-Themen 2
N html-datei auslesen Java Basics - Anfänger-Themen 12
G html datei + Klassen in eine jar datei stecken? Java Basics - Anfänger-Themen 3
T HTML Datei im Browser laden Java Basics - Anfänger-Themen 8
T Eine HTML Datei mit Java bear. Wie soll kann man anfangen? Java Basics - Anfänger-Themen 11
E HTML Datei drucken Java Basics - Anfänger-Themen 4
B Ausgabe in bestimmte Zeile einer html Datei Java Basics - Anfänger-Themen 12
D Html-Datei auf Festplatte öffnen Java Basics - Anfänger-Themen 4
4 HTML-Datei öffnen Java Basics - Anfänger-Themen 7
G .doc-Datei in HTML umwandeln und als Popup einbinden Java Basics - Anfänger-Themen 5
W HTML Datei aus Applet in neuem Browserfenster öffnen Java Basics - Anfänger-Themen 5
W Javadoc HTML erzeugen mit allen dependency Java Basics - Anfänger-Themen 11
M html-seite drucken (gerendert) Java Basics - Anfänger-Themen 3
I HTML Code säubern Java Basics - Anfänger-Themen 4
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
B HTML Code in XML speichern Java Basics - Anfänger-Themen 3
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
S HTML-Quelltext hinter HTTPS Java Basics - Anfänger-Themen 1
J Input/Output Input Buttons Html mit JSP Java Basics - Anfänger-Themen 3
E HTML in Java einbinden oder JavaScript? Java Basics - Anfänger-Themen 5
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
N Status-Log - HTML Java Basics - Anfänger-Themen 12
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
I Meta Tags vergleichen mit Html Vorgabe Java Basics - Anfänger-Themen 8
B HTML Code drucken Java Basics - Anfänger-Themen 4
D HTML Manipulation Navigation Java Basics - Anfänger-Themen 1
Z Html Element aus der Webseite auslesen Java Basics - Anfänger-Themen 1
D Erste Schritte HTML aus JEditorPane drucken Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
M Java und Html Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
T Ausgabe in HTML :( Java Basics - Anfänger-Themen 19
S mit Java HTML Button drücken "lassen" Java Basics - Anfänger-Themen 8
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
T HTML-Inputbox ansteuern Java Basics - Anfänger-Themen 4
I HTML Tabelle nur so lange erzeugen bis Höhe erreicht Java Basics - Anfänger-Themen 9
I HTML in String wandeln? Java Basics - Anfänger-Themen 1
D javacode durch Html ausfuehren Java Basics - Anfänger-Themen 13
W HTML Code, Umlaute werden nicht richtig dargestellt Java Basics - Anfänger-Themen 7
C Html in einem JEditorPane anzeigen Java Basics - Anfänger-Themen 2
O HTML -> BBCode Parser? Java Basics - Anfänger-Themen 3
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
V Umlaute beim Parsen einer HTML Seite Java Basics - Anfänger-Themen 4
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
H Schnell HTML-Tags finden Java Basics - Anfänger-Themen 5
H Welcher Html-Parser? Java Basics - Anfänger-Themen 8
G Probleme beim HTML auslesen Java Basics - Anfänger-Themen 6
J Html zugriff - POST Request/Response Java Basics - Anfänger-Themen 4
Z Input/Output HTML-Seite einlesen Java Basics - Anfänger-Themen 4
H Interface JTextPane html formatiert kopieren Java Basics - Anfänger-Themen 2
L Applet soll Html-File öffnen Java Basics - Anfänger-Themen 2
L NetBeans Applet in html Java Basics - Anfänger-Themen 4
H Java Server/Client, HTML Seite anzeigen Java Basics - Anfänger-Themen 2
D Wie den HTML-Teil des Chat Tutorials aus dem FAQ-Bereich starten? Java Basics - Anfänger-Themen 5
C Link wie bei HTML Java Basics - Anfänger-Themen 7
F Methoden replaceAll (regex) HTML Java Basics - Anfänger-Themen 3
M Mit Java eine HTML-Seite speichern Java Basics - Anfänger-Themen 11
C Java in HTML einbinden Java Basics - Anfänger-Themen 2
N Website HTML mit JavaScript abrufen Java Basics - Anfänger-Themen 9
R JSON - Ausgabe als HTML mit gson Java Basics - Anfänger-Themen 6
R Suche Regex Ausdruck für HTML Java Basics - Anfänger-Themen 11
A JEditorPane + html -> java.io.IOException: invalid url Java Basics - Anfänger-Themen 4
S Lightbox Script vs. Taco HTML Script Java Basics - Anfänger-Themen 4
R Pattern bzw. Regex HTML-Code Java Basics - Anfänger-Themen 10
S String mit ASCII/HTML Zeichen darstellen Java Basics - Anfänger-Themen 10
S HTML Regularer Expression Java Basics - Anfänger-Themen 20
S regulärer Ausdruck HTML Java Basics - Anfänger-Themen 5
D Html Formular auswerten Java Basics - Anfänger-Themen 8
eLogic Einlesen von HTML-Source Java Basics - Anfänger-Themen 6
turmaline Ein regulärer Ausdruck für HTML-Sonderzeichen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben