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.

Était-ce utile?

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 waitfor afin d'indiquer que la commande n'a pas réussi. Sur la base de la documentation, une exception vérifiée uniquement qui sera lancée est d'indiquer que le fil actuel a été interrompu et, dans ce cas, il est possible que la commande ne soit même pas terminée.

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 JAVA.IO pour vous écrire votre propre programme de copie de fichiers ... mais mieux de réutiliser Apache Commons FLITUTILS Aide Classe.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top