Comment vérifier si une commande a réussi?
Question
permet de dire que j'ai ce code
moveDirectory.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
try{
Process send = Runtime.getRunetime().exec(new String[] {"cd /sdcard/music/", "cp pic1 /sdcard/pic1"});
send.waitFor();
} catch (Exception ex){
String toast = null;
Log.i(toast, "Couldn't copy file", ex);
}
}
});
S'il ne parvient pas à copier "PIC1" Comment puis-je vérifier?Je peux donc laisser l'utilisateur savoir en utilisant un toast?Ma seule pensée consiste à écrire du code après celui-ci pour vérifier si "Pic1" est dans le chemin de droite ("/ SDCard /" dans ce cas), mais peut-être qu'il y a un moyen plus facile.
La solution
Vous pouvez lire la sortie de la commande.Dans la commande CP, aucune sortie ne signifie aucune erreur, s'il y a une sortie, vous pouvez le montrer à l'utilisateur pour informer l'erreur.
lire la sortie de commande, vous devez ajouter quelque chose comme:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(send.getInputStream()));
String line;
ArrayList<String> output = new ArrayList<String>();
while ((line = bufferedReader.readLine()) != null){
output.add(line);
}
bonne chance.
Autres conseils
Tout d'abord, il ressemble à votre invocation de EXEC n'est pas celui prévu. Sur la base des documents si vous transmettez une matrice de chaîne, le premier élément de la matrice est la commande et le reste des paramètres. Ici, vous avez deux commandes à la place.
Vous pouvez l'écrire simplement en utilisant une commande très facilement et à l'aide de l'invocation à chaîne unique d'Exec:
Process send = Runtime.getRuntime().exec("cp /sdcard/music/pic1 /sdcard/pic1");
Deuxièmement, aucune exécution n'est lancée par
Ce que vous devez faire est de vérifier le code d'état de sortie du processus. C'est la valeur renvoyée par Waitfor méthode. Est une pratique courante que les processus / programmes renvoient l'état 0 pour indiquer le succès et une autre valeur pour indiquer une erreur. Donc, le code devrait être à la place:
Process send = Runtime.getRunetime().exec("cp /sdcard/music/pic1 /sdcard/pic1");
try {
if (send.waitFor() != 0) {
String toast = null;
Log.i(toast, "Couldn't copy file", ex);
}
} catch (InterruptedException e) {
// up to you how to recover this situation.
}
Troisième et avant-première ... Si ce que vous voulez faire, c'est de copier un fichier, il n'est pas nécessaire d'appeler le système pour cela. Vous pouvez utiliser l'API import org.apache.commons.io.FileUtils;
import java.io.File;
...
FileUtils.copyFile(new File("/sdcard/music/pic1"),new File("/sdcard/music"))
...
Avez-vous essayé d'envoyer.exitvalue (), puis vérifiez s'il s'agit d'un code d'erreur comme -1