Stai passando tutte le informazioni di connessione come un unico valore; equivalente a questo da una riga di comando:
sqlplus "sys as sysdba/example@sqldat.com<connect_string>"
che otterrebbe la stessa risposta della stampa della guida di accesso di SQL*Plus. Hai anche la tua password nel posto sbagliato ma non va così lontano. Da una riga di comando funzionerebbe:
sqlplus "sys/tiger" "as" "example@sqldat.com<connect_string>"
quindi devi passare 5 argomenti a ProcessBuilder , qualcosa come:
String sqlCmd = "sqlplus";
String arg1 = "sys/tiger";
String arg2 = "as";
String arg3 = "example@sqldat.com(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";
String arg4 = fileName;
...
ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1, arg2, arg3, arg4);
Funzionerà comunque solo se il tuo ambiente è configurato per consentire la connessione remota come sysdba . Fare qualsiasi cosa come sys dovrebbe essere molto raro e avere uno script che vuoi eseguire come sys sembra abbastanza insolito da far sembrare un wrapper Java eccessivo - e fa sembrare che potresti connetterti come sys di routine, il che non è una buona idea, ma forse questo è solo un esercizio di apprendimento.