Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","jashan","noor1032");
PreparedStatement stmt=con.prepareStatement("select STUDENT_ID,STU_NAME,GENDER from STUDENT");
ResultSet rs=stmt.executeQuery();
FileWriter fw=new FileWriter("E:\\winter 2019\\COMP 230\\table.txt");
while(rs.next())
{
System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
fw.write(newline+rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
}
fw.close();
FileReader f1=new FileReader("E:\\\\winter 2019\\\\COMP 230\\\\table.txt");
BufferedReader br=new BufferedReader(f1);
int j;
String s;
while((j=br.read())!=-1)
{
char ch=(char)j;
s=new String (String.valueOf(ch));
System.out.print(s);
ta.setText(s);
}
f1.close();
This is my code to retrieve data from a table and write it into a file and then again retrieve data from the file and display it in a textarea(ta). The data printing in file is ok but it is only displaying the last character inside the textarea rather than displaying whole data. What could be the reason?
3 Réponses :
System.out.print ne vide pas, et l'erreur est déjà mentionnée: ta.setText (s) sera écrasé à plusieurs reprises ta par le caractère courant, enfin laissant le dernier caractère. De plus, une seule barre oblique inverse est doublée une fois dans une chaîne "..." normale.
Mais je voulais mentionner les nouvelles classes Chemin, chemins et fichiers . Et try-with-resources qui ferme les fichiers, la connexion, l'instruction et le jeu de résultats. La lecture peut également être effectuée par ligne. Où readLine délivre la ligne de lecture sans nouvelle ligne, ou null en fin de fichier.
J'ai utilisé le format Unicode UTF-8 pour stocker le fichier, afin d'être capable de combiner n'importe quel script / accents spéciaux.
Path path = Paths.get("E:\\winter 2019\\COMP 230\\table.txt");
Class.forName("oracle.jdbc.driver.OracleDriver");
try (Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"...", "...");
PreparedStatement stmt = con.prepareStatement(
"select STUDENT_ID,STU_NAME,GENDER from STUDENT");
ResultSet rs = stmt.executeQuery();
PrintWriter pw = new PrintWriter(Files.newBufferedWriter(path))) {
pw.print('\uFEFF'); // Maybe write Unicode BOM for Windows Notepad
while (rs.next()) {
System.out.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
pw.println(rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3));
}
}
try (BufferedReader br = Files.newBufferedReader(path)) {
String s;
while((s = br.readLine())!= null) {}
System.out.println(s);
ta.setText(ta.getText() + s + "\r\n");
}
}
Vous pouvez envisager la classe Apache commons Utilities FileUtils . Il a une méthode
ta.setText(FileUtils.readFileToString(new File("E:\\\\winter 2019\\\\COMP 230\\\\table.txt"), StandardCharsets.UTF_8));
Cela devrait vraiment résoudre tous vos problèmes. Regardez ici pour javadoc de cette méthode. Tout ce que vous aurez à faire est de
public static String readFileToString(File file,
Charset encoding)
throws IOException
Essayez ce code ... vous écrasez la valeur dans le champ de texte à chaque fois au lieu de concaténer la chaîne puis de l'écrire dans le champ de texte.
String s;
StringBuilder text = new StringBuilder();
while((j=br.read())!=-1)
{
char ch=(char)j;
s=new String (String.valueOf(ch));
System.out.print(s);
text.append(s);
}
ta.setText(text.toString());
f1.close();
Dans votre boucle while, vous mettez à jour la valeur de s avec une nouvelle valeur et la précédente est remplacée, c'est pourquoi vous ne voyez que le dernier caractère.