Lire un fichier Texte dans un plugin java
Fermé
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
-
3 juin 2016 à 16:22
marmoun-83 Messages postés 22 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 3 septembre 2018 - 7 juin 2016 à 11:32
marmoun-83 Messages postés 22 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 3 septembre 2018 - 7 juin 2016 à 11:32
A voir également:
- Lire un fichier Texte dans un plugin java
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Lire un fichier .bin - Guide
3 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
3 juin 2016 à 19:21
3 juin 2016 à 19:21
Bonjour,
Tu peux lire ton fichier avec Files.readAllLines ça va te renvoyer une List<String> et pour chaque String qui représente une ligne tu fais un split("\t") sachant que \t est le caractère de tabulation, ça va te donner un tableau String[] avec chacune des tes valeurs (4 a priori) que tu pourras transformer en valeur numérique avec Integer.parseInt par exemple.
Plus de détails dans la documentation :
https://docs.oracle.com/javase/8/docs/api/
Tu peux lire ton fichier avec Files.readAllLines ça va te renvoyer une List<String> et pour chaque String qui représente une ligne tu fais un split("\t") sachant que \t est le caractère de tabulation, ça va te donner un tableau String[] avec chacune des tes valeurs (4 a priori) que tu pourras transformer en valeur numérique avec Integer.parseInt par exemple.
Plus de détails dans la documentation :
https://docs.oracle.com/javase/8/docs/api/
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
Modifié par KX le 6/06/2016 à 19:15
Modifié par KX le 6/06/2016 à 19:15
Merci pour la réponse... Sur le principe je comprends la démarche mais je ne suis vraiment pas familier avec la syntaxe alors je bloque.
Voilà mon code pour le moment. Si quelqu'un peut me débloquer et faire en sorte que ça marche...
Pour le moment, ca ne fonctionne pas, j'ai une erreur IndexOutof Bounds qui me laisse penser que j'ai mal défini ma boucle... mais je ne sais pas... je ne suis pas sûr de la conversion en integer aussi et de ma syntaxe pour lire le Array...
Par avance merci
Voilà mon code pour le moment. Si quelqu'un peut me débloquer et faire en sorte que ça marche...
import java.awt.*; import ij.*; import ij.gui.*; import ij.process.*; import ij.plugin.PlugIn; import ij.*; import ij.measure.*; import ij.plugin.filter.*; import ij.io.*; import java.io.*; import java.util.ArrayList; public class marmoun implements PlugIn { public void run(String arg) { ArrayList<String> x = new ArrayList<String>(); ArrayList y = new ArrayList(); ArrayList z = new ArrayList(); ArrayList r = new ArrayList(); String fichier ="fichier_marmoun.txt"; BufferedReader ficTexte; try { ficTexte = new BufferedReader(new FileReader(new File(fichier))); if (ficTexte == null) { throw new FileNotFoundException("Fichier non trouvé."); } String line; while((line = ficTexte.readLine())!=null){ String[] res = line.split("\t"); x.add(res[0]); y.add(res[1]); z.add(res[0]); r.add(res[1]); } ficTexte.close(); }catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } //Conversion de mon tableau de chaine de caractères en tableau d'integers ArrayList<Integer> resultX=new ArrayList<Integer>() ; for(String myInt : x) { { resultX.add(Integer.valueOf(myInt)); }} //Assignation de la première valeur d'entier du tableau x à la variable i int i = (int)resultX.get(1); //Affichage d'une boite de dialogue prenant comme variable d'entrée i GenericDialog dia = new GenericDialog ("Dimensions de l'image", IJ.getInstance()); dia.addMessage ("Taille de l'image"); dia.addNumericField ("suivant X", i, 0); dia.addNumericField ("suivant Y", 10, 0); dia.addNumericField ("suivant Z", 10, 0); dia.showDialog(); } }
Pour le moment, ca ne fonctionne pas, j'ai une erreur IndexOutof Bounds qui me laisse penser que j'ai mal défini ma boucle... mais je ne sais pas... je ne suis pas sûr de la conversion en integer aussi et de ma syntaxe pour lire le Array...
Par avance merci
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
6 juin 2016 à 14:46
6 juin 2016 à 14:46
Remarque: pour l'instant je n'essaye de faire fonctionner que mon tableau des 'X'
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
6 juin 2016 à 14:56
6 juin 2016 à 14:56
J'ai également tenté de tout stocker directmeent dans un ArrayList integer sans faire d'étape intermédiaire avec un Integer.parseInt(res[0]) , sans succèes...
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
6 juin 2016 à 19:38
6 juin 2016 à 19:38
Bonjour,
En gros, voici le code qui correspond à mes explications de vendredi.
En gros, voici le code qui correspond à mes explications de vendredi.
import java.io.IOException; import java.nio.file.*; import java.util.*; public class Test { public static void main(String[] args) throws IOException { int[][] result = extract("C:/test.txt", 4, "\t"); for (int[] tab : result) System.out.println(Arrays.toString(tab)); } public static int[][] extract(String fileName, int nbColumns, String delimiter) throws IOException { List<String> rows = Files.readAllLines(Paths.get(fileName)); int nbRows = rows.size(); int[][] result = new int[nbRows][nbColumns]; for (int row = 0; row < nbRows; row++) { String[] columns = rows.get(row).split(delimiter); for (int col = 0; col < nbColumns; col++) { result[row][col] = Integer.parseInt(columns[col]); } } return result; } }
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
Modifié par marmoun-83 le 6/06/2016 à 21:14
Modifié par marmoun-83 le 6/06/2016 à 21:14
Merci Beaucoup, j'essaye ça demain matin !
Tu m'as donc proposé deux méthodes, une avec la fonction "extract" et une en lisant le fichier texte et en bouclant sur les lignes et les colomnes on est d'accord?
A priori , les deux manières de faire fonctionnent ou bien il y en a une a privilégier?
Tu m'as donc proposé deux méthodes, une avec la fonction "extract" et une en lisant le fichier texte et en bouclant sur les lignes et les colomnes on est d'accord?
A priori , les deux manières de faire fonctionnent ou bien il y en a une a privilégier?
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
7 juin 2016 à 11:21
7 juin 2016 à 11:21
Malheureusement, je n'arrive pas à faire fonctionner cela, voilà mes erreurs :
- import java.nio.file.*; ==> le package n'existe pas
- "Cannot find symbol method extract"
Le problème majeu que je rencontre en fait est que pour l'implémentation du plugin je suis contraint d'utiliser la structure suivante.
mport ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
import ij.plugin.frame.*;
public class My_Plugin implements PlugIn {
public void run(String arg) {
}
}
Si j'implémente ton code à l'intérieur de ma class My_Plugin, je reçois un message d'erreur me disant "My_Pluign is not abstract and does not override abstract method run". Je dois dire que je ne me rapelle plus trop de ces histoires de classes privées publiques abstractes.....
Je comprends bien le sen de ton code donc mais n'arrive pas à le faire tourner. Merci pour ton aide.
- import java.nio.file.*; ==> le package n'existe pas
- "Cannot find symbol method extract"
Le problème majeu que je rencontre en fait est que pour l'implémentation du plugin je suis contraint d'utiliser la structure suivante.
mport ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.*;
import ij.plugin.frame.*;
public class My_Plugin implements PlugIn {
public void run(String arg) {
}
}
Si j'implémente ton code à l'intérieur de ma class My_Plugin, je reçois un message d'erreur me disant "My_Pluign is not abstract and does not override abstract method run". Je dois dire que je ne me rapelle plus trop de ces histoires de classes privées publiques abstractes.....
Je comprends bien le sen de ton code donc mais n'arrive pas à le faire tourner. Merci pour ton aide.
marmoun-83
Messages postés
22
Date d'inscription
jeudi 25 août 2011
Statut
Membre
Dernière intervention
3 septembre 2018
7 juin 2016 à 11:32
7 juin 2016 à 11:32
Mon code :
import ij.*;
import ij.gui.*;
import ij.process.*;
import ij.plugin.PlugIn;
import ij.*;
import ij.measure.*;
import ij.plugin.filter.*;
import ij.io.*;
import java.io.*;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
public class marmoun_V2 implements PlugIn {
public static void main(String[] args) throws IOException {
int[][] result = extract("/home/smarmounie/Plugin/fichier_marmoun.txt", 4, "\t");
for (int[] tab : result)
System.out.println(Arrays.toString(tab));
}
public static int[][] extract(String fileName, int nbColumns,
String delimiter) throws IOException {
List<String> rows = Files.readAllLines(Paths.get(fileName));
int nbRows = rows.size();
int[][] result = new int[nbRows][nbColumns];
for (int row = 0; row < nbRows; row++) {
String[] columns = rows.get(row).split(delimiter);
for (int col = 0; col < nbColumns; col++) {
result[row][col] = Integer.parseInt(columns[col]);
}
}
return result;
}
}
Et mon message d'erreur :
Started marmoun_V2.java at Tue Jun 07 11:30:52 CEST 2016
Compiling 1 file in /tmp/java3517766740840905638
/tmp/java3517766740840905638/src/main/java/marmoun_V2.java:17: marmoun_V2 is not abstract and does not override abstract method run(java.lang.String) in ij.plugin.PlugIn
public class marmoun_V2 implements PlugIn {
^
/tmp/java3517766740840905638/src/main/java/marmoun_V2.java:26: cannot find symbol
symbol : variable Paths
location: class marmoun_V2
List<String> rows = Files.readAllLines(Paths.get(fileName));
^
/tmp/java3517766740840905638/src/main/java/marmoun_V2.java:26: cannot find symbol
symbol : variable Files
location: class marmoun_V2
List<String> rows = Files.readAllLines(Paths.get(fileName));
^
3 errors
java.lang.ClassNotFoundException: marmoun_V2
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.scijava.plugins.scripting.java.JavaEngine.compile(JavaEngine.java:230)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:135)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:173)
at org.scijava.script.ScriptModule.run(ScriptModule.java:174)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:167)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at org.scijava.plugins.scripting.java.CommandJavaRunner.supports(CommandJavaRunner.java:71)
at org.scijava.plugins.scripting.java.CommandJavaRunner.supports(CommandJavaRunner.java:46)
at org.scijava.plugins.scripting.java.DefaultJavaService.run(DefaultJavaService.java:60)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:136)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:173)
at org.scijava.script.ScriptModule.run(ScriptModule.java:174)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:167)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Si tu as une idée je t'en serai très reconnaissant
import ij.*;
import ij.gui.*;
import ij.process.*;
import ij.plugin.PlugIn;
import ij.*;
import ij.measure.*;
import ij.plugin.filter.*;
import ij.io.*;
import java.io.*;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
public class marmoun_V2 implements PlugIn {
public static void main(String[] args) throws IOException {
int[][] result = extract("/home/smarmounie/Plugin/fichier_marmoun.txt", 4, "\t");
for (int[] tab : result)
System.out.println(Arrays.toString(tab));
}
public static int[][] extract(String fileName, int nbColumns,
String delimiter) throws IOException {
List<String> rows = Files.readAllLines(Paths.get(fileName));
int nbRows = rows.size();
int[][] result = new int[nbRows][nbColumns];
for (int row = 0; row < nbRows; row++) {
String[] columns = rows.get(row).split(delimiter);
for (int col = 0; col < nbColumns; col++) {
result[row][col] = Integer.parseInt(columns[col]);
}
}
return result;
}
}
Et mon message d'erreur :
Started marmoun_V2.java at Tue Jun 07 11:30:52 CEST 2016
Compiling 1 file in /tmp/java3517766740840905638
/tmp/java3517766740840905638/src/main/java/marmoun_V2.java:17: marmoun_V2 is not abstract and does not override abstract method run(java.lang.String) in ij.plugin.PlugIn
public class marmoun_V2 implements PlugIn {
^
/tmp/java3517766740840905638/src/main/java/marmoun_V2.java:26: cannot find symbol
symbol : variable Paths
location: class marmoun_V2
List<String> rows = Files.readAllLines(Paths.get(fileName));
^
/tmp/java3517766740840905638/src/main/java/marmoun_V2.java:26: cannot find symbol
symbol : variable Files
location: class marmoun_V2
List<String> rows = Files.readAllLines(Paths.get(fileName));
^
3 errors
java.lang.ClassNotFoundException: marmoun_V2
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.scijava.plugins.scripting.java.JavaEngine.compile(JavaEngine.java:230)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:135)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:173)
at org.scijava.script.ScriptModule.run(ScriptModule.java:174)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:167)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at org.scijava.plugins.scripting.java.CommandJavaRunner.supports(CommandJavaRunner.java:71)
at org.scijava.plugins.scripting.java.CommandJavaRunner.supports(CommandJavaRunner.java:46)
at org.scijava.plugins.scripting.java.DefaultJavaService.run(DefaultJavaService.java:60)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:136)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:173)
at org.scijava.script.ScriptModule.run(ScriptModule.java:174)
at org.scijava.module.ModuleRunner.run(ModuleRunner.java:167)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
at org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Si tu as une idée je t'en serai très reconnaissant